Вступление:
В этой статье мы узнаем, как удалять пустые значения из списка Java с помощью простой старой версии Java, лямбда-выражения Java 8 и некоторых сторонних библиотек.
Итак, начнем!
Удаление нулей из списка в Java:
Давайте рассмотрим различные способы удаления пустых значений из списка Java:
1. Java 7 или ниже:
При работе с Java 7 или более поздними версиями мы можем использовать приведенную ниже конструкцию для удаления всех нулей из списка:
Ява
|
01
02
03
04
05
06
07
08
09
10
|
@Testpublic 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
|
@Testpublic 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
|
@Testpublic 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
|
@Testpublic 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
|
@Testpublic 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
|
@Testpublic 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
|
@Testpublic 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, являются их собственными. |