Объединить два set java

Объединить два набора в Java

В этом посте будет обсуждаться, как объединить два набора в Java, используя обычные коллекции Java, Java 8, Guava и Apache Commons.

Обратите внимание, что любой повторяющийся элемент, присутствующий в наборе, будет удален во время слияния.

1. Использование Set.addAll() метод

The Set интерфейс обеспечивает addAll() метод, который добавляет все элементы указанной коллекции в конец набора. Мы можем использовать его как:

Мы можем предотвратить лишний вызов addAll() инициализируя окончательный набор первым или вторым набором, используя HashSet конструктор.

Вот небольшая вариация вышеописанного подхода с использованием потоков в Java 8 и выше:

2. Использование двойной скобки для инициализации

Мы также можем использовать инициализацию двойной скобки для объединения двух наборов, что внутренне создает анонимный внутренний класс с инициализатором экземпляра в нем. Но нам лучше избегать этого, так как это требует дополнительного класса при каждом использовании. Он также содержит скрытые ссылки на вмещающий экземпляр и любые захваченные объекты, что может вызвать проблемы с сериализацией или утечками памяти.

3. Использование Collections.addAll() метод

Collections класс предоставляет addAll(Collection, T[]) метод, который следует предпочесть Set.addAll() метод, так как он обеспечивает лучшую производительность.

4. Использование flatMap() метод

Идея состоит в том, чтобы получить поток элементов из обоих наборов с помощью статического фабричного метода. Stream.of() и накапливать все элементы в новый набор, используя Collector, как показано ниже:

Читайте также:  Python построение графиков валют

5. Использование Java 8 Stream.of() с Stream.forEach() метод

Мы можем избежать использования Collector путем накопления всех элементов с использованием forEach() вместо этого, как показано ниже:

6. Использование Java 8 Stream.concat() + Коллекционер

Поток Java обеспечивает concat() который принимает два потока в качестве входных данных и создает лениво объединенный поток, элементами которого являются все элементы первого потока, за которыми следуют все элементы второго потока.

7. Использование итерируемых объектов Guava

Guava’s Iterables класс предоставляет concat() метод, который можно использовать для объединения двух итераций в одну итерацию.

Мы также можем использовать addAll() метод, предоставляемый Iterables class, который добавляет в коллекцию все элементы iterable. Мы можем использовать это так же, как Collections addAll() метод.

Источник

Оцените статью