Google Guava isNullOrEmpty для коллекций
Я вижу, что у Guava есть метод utNullOrEmpty для строк
Strings.isNullOrEmpty(str)
Есть ли у нас что-то подобное для списков? Что-то вроде
Lists.isNullOrEmpty(list)
который должен быть эквивалентен
list == null || list.isEmpty()
Кроме того, есть ли у нас что-то подобное для массивов? Что-то вроде
Arrays.isNullOrEmpty(arr)
который должен быть эквивалентен
arr == null || arr.length == 0
Ответы
Ответ 1
Нет, этот метод не существует в Гуаве и фактически находится на нашем "кладбище идей".
Мы не считаем, что "пусто или пусто" - это вопрос, который вы действительно хотите спросить о коллекции.
Если коллекция может быть нулевой, а значение null должно обрабатываться так же, как пустое, а затем получить всю эту двусмысленность с самого начала, например:
Set<Foo> foos = NaughtyClass.getFoos();
if (foos == null) {
foos = ImmutableSet.of();
}
или как это (если хотите):
Set<Foo> foos = MoreObjects.firstNonNull(
NaughtyClass.getFoos(), ImmutableSet.<Foo>of());
После этого вы можете просто использовать .isEmpty()
как обычно. Сделайте это немедленно, вызвав непослушный API, и вы поместили странность позади вас, вместо того, чтобы позволить ему продолжать бесконечно.
И если "null, который действительно означает пустую коллекцию" не возвращается вам, а передается вам, ваша задача проста: просто дайте a NullPointerException
быть выброшенным и сделайте эту форму вызывающего абонента.
Ответ 2
Одна вещь, которую вы, как правило, найдете в Гуаве, состоит в том, что они имеют тенденцию быть очень антагонистическими по отношению к null
s. Авторы хотели бы отговорить вас от использования null
столько, сколько вы, вероятно, сделали, а предоставление служебных методов, облегчающих использование null
, было бы контрпродуктивным с этой целью.
Если вы хотите использовать парадигму Guava, подумайте, действительно ли источник этой коллекции (или массива) должен возвращать null
. Если нет, подумайте о его маркировке @NonNull
и верните пустые коллекции вместо null
. Или как параметр для функции, ожидающей нет null
-значных списков, рассмотрите возможность использования Preconditions.checkNotNull
, которая выдает исключение, если null
(неожиданно) передано.
Если null
действительно является законным, list == null || list.isEmpty()
не так сложно.
Ответ 3
Там CollectionUtils.isEmpty() в коллекциях коллекций.
Ответ 4
Spring У платформы есть специализированный класс, называемый CollectionUtils
. И метод, который вы ищете, это: org.springframework.util.CollectionUtils.isEmpty
. Он возвращает true для пустых и пустых коллекций.
А для массивов существует метод org.springframework.util.ObjectUtils.isEmpty
, который ведет себя довольно точно.
Ответ 5
Apache CollectionUtils 4 имеет метод CollectionUtils.emptyIfNull(), который возвращает пустой список, если коллекция равна null. Это очень полезно в цикле foreach, поэтому вам не нужно выполнять нулевую проверку перед повторением
Ответ 6
Мое решение: MoreObjects.firstNonNull(list, Collections. emptyList())
Я использую Guava MoreObjects с коллекциями JDK.
@Test
public void listnull() {
List<String> list = null;
for (String str : MoreObjects.firstNonNull(list, Collections.<String> emptyList())) {
System.out.println(str);
}
list = new ArrayList<String>();
list.add("http://stackoverflow.com/");
for (String str : MoreObjects.firstNonNull(list, Collections.<String> emptyList())) {
System.out.println(str);
}
}
Ответ 7
Посмотрите на коллекции Appache
CollectionUtils.isEmpty()
возвращает true, если коллекция пуста или пуста