Java union two sets

Union of two sets

This example will demonstrate how to find the union of two sets using java, guava and apache commons. Unlike merging two lists where it will combine all items, the union of two sets is a set containing all of the elements contained in either set. The snippets below will show how to find unique friends between two sets that represents yourFriends and myFriends.

Setup

SetString> yourFriends = Sets.newHashSet( "Desiree Jagger", "Benedict Casteel", "Evon Saddler", "Toby Greenland", "Norine Caruana", "Felecia Houghton", "Lanelle Franzoni", "Armandina Everitt", "Inger Honea", "Autumn Hendriks"); SetString> myFriends = Sets.newHashSet( "Karrie Rutan", "Desiree Jagger", "Armandina Everitt", "Arlen Nowacki", "Ward Siciliano", "Mira Yonts", "Marcelo Arab", "Autumn Hendriks", "Mazie Hemstreet", "Toby Greenland");

Straight up Java

This snippet, using core functionality in the JDK, will add all the elements in the specified collection to the sets if they are not already present.

@Test public void union_of_sets_java ()  SetString> totalFriends = new HashSetString>(yourFriends); totalFriends.addAll(myFriends); assertEquals(16, totalFriends.size()); >

Google Guava

This snippet will find the unique elements in two sets using guava.

@Test public void union_of_sets_guava ()  SetString> totalFriends = Sets.union(yourFriends, myFriends); assertEquals(16, totalFriends.size()); >

Apache Commons

This snippet will find the union of two collections using apache commons CollectionUtils.union method.

@Test public void union_of_sets_apache ()  @SuppressWarnings("unchecked") CollectionString> totalFriends = CollectionUtils.union(yourFriends, myFriends); assertEquals(16, totalFriends.size()); >

Union of two sets posted by Justin Musgrove on 19 November 2013

Tagged: java and java-collections

Источник

Объединить два набора в 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, как показано ниже:

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() метод.

Источник

Читайте также:  Vue js css framework
Оцените статью