Вступление:
В этой статье мы узнаем, как удалять пустые значения из списка 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, являются их собственными. |