Найти тему

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

Оглавление

1. Общий обзор

В этом кратком руководстве будет показано, как удалить все нулевые элементы из списка, используя обычную Java, Guava, коллекции Apache Commons и более новую поддержку Java 8 lambda.

2. Удаление нулевых значений из списка, Используя обычную Java

Java Collections Framework предлагает простое решение для удаления всех нулевых элементов в списке – базовый цикл while:

@Test
public void givenListContainsNulls_whenRemovingNullsWithPlainJava_thenCorrect() {
List<Integer> list = Lists.newArrayList(null, 1, null);
while (list.remove(null));

assertThat(list, hasSize(1));
}

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

@Test
public void givenListContainsNulls_whenRemovingNullsWithPlainJavaAlternative_thenCorrect() {
List<Integer> list = Lists.newArrayList(null, 1, null);
list.removeAll(Collections.singleton(null));

assertThat(list, hasSize(1));
}

Обратите внимание, что оба этих решения изменят список источников.

3. Удаление пустых полей из списка с помощью Google Guava

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

@Test
public void givenListContainsNulls_whenRemovingNullsWithGuavaV1_thenCorrect() {
List<Integer> list = Lists.newArrayList(null, 1, null);
Iterables.removeIf(list, Predicates.isNull());

assertThat(list, hasSize(1));
}

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

@Test
public void givenListContainsNulls_whenRemovingNullsWithGuavaV2_thenCorrect() {
List<Integer> list = Lists.newArrayList(null, 1, null, 2, 3);
List<Integer> listWithoutNulls = Lists.newArrayList(
Iterables.filter(list, Predicates.notNull()));

assertThat(listWithoutNulls, hasSize(3));
}

4. Удаление нулевых значений из списка с помощью Apache Commons Collections

Давайте теперь рассмотрим простое решение с использованием библиотеки Apache Commons Collections, использующей аналогичный функциональный стиль:

@Test
public void givenListContainsNulls_whenRemovingNullsWithCommonsCollections_thenCorrect() {
List<Integer> list = Lists.newArrayList(null, 1, 2, null, 3, null);
CollectionUtils.filter(list, PredicateUtils.notNullPredicate());

assertThat(list, hasSize(3));
}

Обратите внимание, что это решение также изменит исходный список.

5. Удаление пустых значений из Списка С помощью Лямбд (Java 8)

Наконец, давайте рассмотрим решение на Java 8, использующее лямбда–выражения для фильтрации списка; процесс фильтрации может выполняться параллельно или последовательно:

@Test
public void givenListContainsNulls_whenFilteringParallel_thenCorrect() {
List<Integer> list = Lists.newArrayList(null, 1, 2, null, 3, null);
List<Integer> listWithoutNulls = list.parallelStream()
.filter(Objects::nonNull)
.collect(Collectors.toList());
}

@Test
public void givenListContainsNulls_whenFilteringSerial_thenCorrect() {
List<Integer> list = Lists.newArrayList(null, 1, 2, null, 3, null);
List<Integer> listWithoutNulls = list.stream()
.filter(Objects::nonNull)
.collect(Collectors.toList());
}

public void givenListContainsNulls_whenRemovingNullsWithRemoveIf_thenCorrect() {
List<Integer> listWithoutNulls = Lists.newArrayList(null, 1, 2, null, 3, null);
listWithoutNulls.removeIf(Objects::isNull);

assertThat(listWithoutNulls, hasSize(3));
}

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

5. Заключение

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

Оригинал статьи: https://www.baeldung.com/java-remove-nulls-from-list