Удаление дубликатов из ArrayList на Java — HashSet и Stream
Пример 1: Удаление дубликатов из ArrayList с помощью Set
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.Set;
class Main {
public static void main(String[] args) {
// create an arraylist from the array
// using asList() method of the Arrays class
ArrayList<Integer> numbers = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 1, 3));
System.out.println("ArrayList with duplicate elements: " + numbers);
// convert the arraylist into a set
Set<Integer> set = new LinkedHashSet<>();
set.addAll(numbers);
// delete al elements of arraylist
numbers.clear();
// add element from set to arraylist
numbers.addAll(set);
System.out.println("ArrayList without duplicate elements: " + numbers);
}
}
Вывод:
ArrayList with duplicate elements: [1, 2, 3, 4, 1, 3]
ArrayList without duplicate elements: [1, 2, 3, 4]
В приведённом примере мы создали ArrayList с именем numbers. Список содержит дубликаты.
Чтобы удалить дубликаты, мы:
добавляем все элементы из
ArrayListво множество;очищаем
ArrayListс помощью методаclear();добавляем все элементы из множества обратно в
ArrayList.
Совет
Мы использовали LinkedHashSet для создания множества, потому что он удаляет дубликаты и сохраняет порядок вставки.
Пример 2: Удаление дубликатов из ArrayList с помощью Stream
import java.util.ArrayList;
import java.util.Arrays;
import java.util.stream.Collectors;
import java.util.stream.Stream;
class Main {
public static void main(String[] args) {
// create an arraylist from the array
// using asList() method of the Arrays class
ArrayList<Integer> numbers = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 1, 3));
System.out.println("ArrayList with duplicate elements: " + numbers);
// create a stream from arraylist
Stream<Integer> stream = numbers.stream();
// call the distinct() of Stream
// to remove duplicate elements
stream = stream.distinct();
// convert the stream to arraylist
numbers = (ArrayList<Integer>)stream.collect(Collectors.toList());
System.out.println("ArrayList without duplicate elements: " + numbers);
}
}
Вывод:
ArrayList with duplicate elements: [1, 2, 3, 4, 1, 3]
ArrayList without duplicate elements: [1, 2, 3, 4]
В этом примере мы использовали класс Stream для удаления дубликатов из ArrayList:
numbers.stream()— создаёт поток изArrayList;stream.distinct()— удаляет дубликаты;stream.collect(Collectors.toList())— возвращает список из потока.
Здесь мы использовали приведение типов, чтобы преобразовать возвращённый List в ArrayList.