Удаление всех дубликатов из списка в 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
Java - объединение нескольких коллекций
Краткое и практическое руководство по объединению нескольких коллекций в Java
Как найти элемент в списке с помощью Java
Взгляните на несколько быстрых способов найти элемент в списке в Java
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, поэтому его легко импортировать и запускать.