Статьи

Java — удалить все нули из списка

Вступление:

В этой статье мы узнаем, как удалять пустые значения из списка Java с помощью простой старой версии Java, лямбда-выражения Java 8 и некоторых сторонних библиотек.

Итак, начнем!

Удаление нулей из списка в Java:

Давайте рассмотрим различные способы удаления пустых значений из списка Java:

1. Java 7 или ниже:

При работе с Java 7 или более поздними версиями мы можем использовать приведенную ниже конструкцию для удаления всех нулей из списка:

Ява

01
02
03
04
05
06
07
08
09
10
@Test
public removeAllNullsFromListWithJava7OrLower() {
  
    List<String> list =
      new ArrayList<>(Arrays.asList("A", null, "B", null));
  
    list.removeAll(Collections.singleton(null));
  
    assertThat(list, hasSize(2));
}

Обратите внимание, что мы создали изменяемый список здесь. Попытка удалить пустые значения из неизменяемого списка приведет к исключению java.lang.UnsupportedOperationException .

2. Java 8 или более поздняя версия:

Подход к удалению нулей из Списка Java для Java 8 или более поздних версий довольно интуитивен и элегантен:

01
02
03
04
05
06
07
08
09
10
@Test
public removeAllNullsFromListWithJava8() {
  
    List<String> list =
      new ArrayList<>(Arrays.asList("A", null, "B", null));
  
    list.removeIf(Objects::isNull);
  
    assertThat(list, hasSize(2));
}

Мы можем просто использовать конструкцию removeIf (), чтобы удалить все нулевые значения.

Если мы не хотим изменять существующий список и возвращать новый список со всеми ненулевыми значениями, мы можем иметь:

Ява

01
02
03
04
05
06
07
08
09
10
11
12
@Test
public removeAllNullsFromListWithJava8() {
  
    List<String> list =
      new ArrayList<>(Arrays.asList("A", null, "B", null));
  
    List<String> newList = list.stream().filter(Objects::nonNull)
      .collect(Collectors.toList());
  
    assertThat(list, hasSize(4));
    assertThat(newList, hasSize(2));
}

Подробнее о сборщиках потоков Java 8 можно узнать здесь.

3. Apache Commons:

Класс Apache Commons CollectionUtils предоставляет метод фильтра (Iterable, Predicate), который также может решить нашу задачу. Переданный предикат применяется ко всем элементам в списке:

Ява

01
02
03
04
05
06
07
08
09
10
@Test
public removeAllNullsFromListWithApacheCommons() {
  
    List<String> list =
      new ArrayList<>(Arrays.asList("A", null, "B", null));
  
    CollectionUtils.filter(list, PredicateUtils.notNullPredicate());
  
    assertThat(list, hasSize(2));
}

Таким образом, отфильтровывая все нули из существующего списка.

4. Google Guava:

Класс Iterables в Guava предоставляет метод removeIf (Iterable, Predicate), который помогает нам фильтровать наши значения на основе заданного предиката. Давайте посмотрим, как мы можем использовать это в наших интересах:

Ява

01
02
03
04
05
06
07
08
09
10
@Test
public removeAllNullsFromListUsingGuava() {
  
    List<String> list =
      new ArrayList<>(Arrays.asList("A", null, "B", null));
  
    Iterables.removeIf(list, Predicates.isNull());
  
    assertThat(list, hasSize(2));
}

В качестве альтернативы, если мы не хотим изменять существующий список, Guava позволяет нам создать новый отфильтрованный список:

Ява

01
02
03
04
05
06
07
08
09
10
11
12
@Test
public removeAllNullsFromListUsingGuava() {
  
    List<String> list =
      new ArrayList<>(Arrays.asList("A", null, "B", null));
  
    List<String> newList = new ArrayList<>(
      Iterables.filter(list, Predicates.notNull()));
  
    assertThat(list, hasSize(4));
    assertThat(newList, hasSize(2));
}

Ява

01
02
03
04
05
06
07
08
09
10
11
12
@Test
public removeAllNullsFromList() {
  
    List<String> list =
      new ArrayList<>(Arrays.asList("A", null, "B", null));
  
    List<String> newList = new ArrayList<>(
      Iterables.filter(list, Predicates.notNull()));
  
    assertThat(list, hasSize(4));
    assertThat(newList, hasSize(2));
}

Вывод:

В этом кратком руководстве мы рассмотрели несколько способов удаления всех нулей из списка в Java.

Оставьте первый комментарий.

Опубликовано на Java Code Geeks с разрешения Шубхры Шриваставы, партнера нашей программы JCG . Смотреть оригинальную статью здесь: Java — удалить все нули из списка

Мнения, высказанные участниками Java Code Geeks, являются их собственными.