Ответ 1
keys.contains(null) || keys.contains("")
Не генерирует исключений и результатов выполнения во время выполнения true
, если ваш список имеет либо нулевую (или) пустую строку.
В Java у меня есть следующий метод:
public String normalizeList(List<String> keys) {
// ...
}
Я хочу проверить, что keys
:
null
; иsize() == 0
); иString
, которые null
; иString
, которые пусты ("")Это полезный метод, который будет использоваться в "обычном" стиле JAR (класс wil будет чем-то вроде DataUtils
). Вот что у меня есть, но я считаю, что это неверно:
public String normalize(List<String> keys) {
if(keys == null || keys.size() == 0 || keys.contains(null) || keys.contains(""))
throw new IllegalArgumentException("Bad!");
// Rest of method...
}
Я считаю, что последние 2 проверки для keys.contains(null)
и keys.contains("")
являются неправильными и, скорее всего, будут вызывать исключения во время выполнения. Я знаю, что могу просто прокрутить список внутри оператора if
и проверить там nulls/empties, но я ищу более элегантное решение, если оно существует.
keys.contains(null) || keys.contains("")
Не генерирует исключений и результатов выполнения во время выполнения true
, если ваш список имеет либо нулевую (или) пустую строку.
Это выглядит хорошо для меня, единственными исключениями, которые вы получили бы от keys.contains(null)
и keys.contains("")
, было бы, если keys
сам был null
.
Однако, поскольку вы сначала проверяете это, вы знаете, что на данный момент keys
не null
, поэтому исключений во время выполнения не будет.
Я не уверен, но нет ли в этом классе вспомогательного класса в библиотеке ApacheCommon? например, когда у вас есть isEmpty для строки, и у вас есть isNullOrEmpty в библиотеке ApacheCommons
Проверить список за один проход
public static boolean empty(String s) {
if (s == null)
return true;
else if (s.length() == 0)
return true;
return false;
}
public String normalize(List<String> keys) {
if(keys == null || keys.size() == 0)
throw new IllegalArgumentException("Bad!");
for (String key: keys)
if(empty(key))
throw new IllegalArgumentException("Empty!");
// Rest of method...
return null;
}
Вы также можете использовать Apache StringUtils и проверить, является ли строкаBlank, это будет проверять значение null, Emptystring и также обрезает ваше значение.
if(StringUtils.isBlank(listItemString)){...}
Оформить заказ StringUtils Docs здесь:
https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html
С Java 8 вы можете сделать:
public String normalizeList(List<String> keys) {
boolean bad = keys.stream().anyMatch(s -> (s == null || s.equals("")));
if(bad) {
//... do whatever you want to do
}
}