В этом кратком руководстве будет показано, как удалить все null элементы из списка, используя обычную Java,, Apache Commons Collections и новую поддержку в Java 8 lambda.
Удаление null значений из списка с помощью обычной Java
Java Collections Framework предлагает простое решение для удаления всех null элементов в списке – простой цикл while:
public void removingNullsWithPlainJava() {
List<Integer> list = Lists.newArrayList(null, 3, null);
while (list.remove(null));
// здесь list состоит из одного элемента 3
}
В качестве альтернативы мы также можем использовать следующий простой подход:
public void removingNullsWithPlainJavaAlternative() {
List<Integer> list = Lists.newArrayList(null, 3, null);
list.removeAll(Collections.singleton(null));
// здесь list состоит из одного элемента 3
}
Обратите внимание, что оба этих решения изменяют начальные списки.
Удаление null значений из списка с помощью Apache Commons Collections
Давайте теперь рассмотрим простое решение с использованием библиотеки Apache Commons Collections, использующей аналогичный функциональный стиль:
public void removingNullsWithCommonsCollections() {
List<Integer> list = Lists.newArrayList(null, 5, 6, null, 7, null);
CollectionUtils.filter(list, PredicateUtils.notNullPredicate());
// здесь list состоит из элементов 5, 6, 7
}
Обратите внимание, что это решение также изменяет исходный список.
Удаление null значений из списка с помощью лямбд Java 8
Наконец, давайте рассмотрим решение Java 8, использующее лямбды для фильтрации списка; процесс фильтрации может выполняться параллельно или последовательно:
public void filteringParallel() {
List<Integer> list = Lists.newArrayList(null, 3, 2, null, 4, null);
List<Integer> listWithoutNulls = list.parallelStream()
.filter(Objects::nonNull)
.collect(Collectors.toList());
}
public void filteringSerial() {
List<Integer> list = Lists.newArrayList(null, 3, 2, null, 4, null);
List<Integer> listWithoutNulls = list.stream()
.filter(Objects::nonNull)
.collect(Collectors.toList());
}
public void removingNullsWithRemoveIf() {
List<Integer> listWithoutNulls = Lists.newArrayList(null, 3, 2, null, 4, null);
listWithoutNulls.removeIf(Objects::isNull);
}
И это все – несколько быстрых и очень полезных решений для удаления всех нулевых элементов из списка.