Рубрики
Без рубрики

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

Как удалить все нули из списка с помощью простой Java, Guava, рамки Commons Collections или новой поддержки Java 8 lambda.

Автор оригинала: Eugen Paraschiv.

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

Эта статья является частью серии “Java – Назад к основным” здесь, на Baeldung.

1. Удалить нули из списка с помощью простой Java

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

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

    assertThat(list, hasSize(1));
}

Кроме того, мы также можем использовать следующий простой подход:

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

    assertThat(list, hasSize(1));
}

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

2. Удалить nulls из списка с помощью Google Guava

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

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

    assertThat(list, hasSize(1));
}

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

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

    assertThat(listWithoutNulls, hasSize(3));
}

3. Удалить нули из списка, используя коллекции Apache Commons

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

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

    assertThat(list, hasSize(3));
}

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

4. Удалить нули из списка с использованием Lambdas (Java 8)

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

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

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

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

    assertThat(listWithoutNulls, hasSize(3));
}

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

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

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

Реализация всех этих примеров и фрагментов можно найти в Проект GitHub . Это Maven основе проекта, поэтому она должна быть легко импортировать и запускать.