Статья

Как удалить все null из списка в Java

В этом кратком руководстве будет показано, как удалить все 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);
}
И это все – несколько быстрых и очень полезных решений для удаления всех нулевых элементов из списка.
java