42. Объединить два списка без дубликатов
Условие задачи:
Необходимо объединить два списка целых чисел, исключив повторяющиеся элементы.
Код:
public List<Integer> collect(List<Integer> lst1, List<Integer> lst2) {
// код тут
}
Спойлеры к решению
Подсказки
💡 Для удаления дубликатов можно использовать
💡
💡 Через Stream API можно использовать
💡 Если элементы должны быть отсортированы, подойдёт
Set.💡
LinkedHashSet сохраняет порядок первого появления элементов.💡 Через Stream API можно использовать
Stream.concat() и distinct().💡 Если элементы должны быть отсортированы, подойдёт
TreeSet.Решение
Вариант с LinkedHashSet:
public List<Integer> collect(
List<Integer> lst1,
List<Integer> lst2
) {
Set<Integer> uniqueValues = new LinkedHashSet<>();
uniqueValues.addAll(lst1);
uniqueValues.addAll(lst2);
return new ArrayList<>(uniqueValues);
}
LinkedHashSet удаляет дубликаты и сохраняет порядок первого появления элементов.
Вариант через Stream API:
public List<Integer> collect(
List<Integer> lst1,
List<Integer> lst2
) {
return Stream.concat(
lst1.stream(),
lst2.stream()
)
.distinct()
.collect(Collectors.toList());
}
Оба решения проходят по элементам входных списков и имеют линейную сложность в среднем.
Для объединения списков без дубликатов можно использовать
LinkedHashSetили объединить два потока черезStream.concat()и вызватьdistinct().