Удаление всех дубликатов из списка в Java

Удаление всех дубликатов из списка в Java

Это краткое руководство покажет вамhow to clean up the duplicate elements from a List - сначала с использованием простой Java, затем Guava и, наконец, решения на основе Java 8 Lambda.

Эта статья является частьюthe “Java – Back to Basic” series здесь для примера.

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

Удаление повторяющихся элементов из списка с помощью стандартной среды коллекций Java выполняется легкоthrough a Set:

public void
  givenListContainsDuplicates_whenRemovingDuplicatesWithPlainJava_thenCorrect() {
    List listWithDuplicates = Lists.newArrayList(0, 1, 2, 3, 0, 0);
    List listWithoutDuplicates = new ArrayList<>(
      new HashSet<>(listWithDuplicates));

    assertThat(listWithoutDuplicates, hasSize(4));
}

Как видите, исходный список остается без изменений.

Дальнейшее чтение:

Интервью с коллекциями Java

Набор практических вопросов, касающихся собеседований на Java

Read more

Java - объединение нескольких коллекций

Краткое и практическое руководство по объединению нескольких коллекций в Java

Read more

Как найти элемент в списке с помощью Java

Взгляните на несколько быстрых способов найти элемент в списке в Java

Read more

2. Удаление дубликатов из списка с помощью Guava

То же самое можно сделать с помощью Guava:

public void
  givenListContainsDuplicates_whenRemovingDuplicatesWithGuava_thenCorrect() {
    List listWithDuplicates = Lists.newArrayList(0, 1, 2, 3, 0, 0);
    List listWithoutDuplicates
      = Lists.newArrayList(Sets.newHashSet(listWithDuplicates));

    assertThat(listWithoutDuplicates, hasSize(4));
}

И снова, первоначальный список остается без изменений.

3. Удаление дубликатов из списка с помощью лямбда-выражений Java 8

Наконец, давайте посмотрим на новое решение, использующее Lambdas в Java 8; мы перейдем кuse the distinct() method from the Stream API, который возвращает поток, состоящий из отдельных элементов, на основе результата, возвращенного методомequals():

public void
  givenListContainsDuplicates_whenRemovingDuplicatesWithJava8_thenCorrect() {
    List listWithDuplicates = Lists.newArrayList(1, 1, 2, 2, 3, 3);
    List listWithoutDuplicates = listWithDuplicates.stream()
     .distinct()
     .collect(Collectors.toList());
}

И вот у нас это есть - 3 быстрых способа убрать все дубликаты из списка.

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

Эта статья демонстрирует нам, как легко мы можем удалить дубликаты из списка с помощью простого Java, Google Guava и Java 8.

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