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() не так сложно.

Ответ 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, если коллекция пуста или пуста