Преобразование между списком и набором в Java

1. Общий обзор

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

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

2. Преобразуйте список в набор

2.1. С помощью простой Java

Давайте начнем с преобразования списка в набор с помощью Java:

public void givenUsingCoreJava_whenListConvertedToSet_thenCorrect() {
List<Integer> sourceList = Arrays.asList(0, 1, 2, 3, 4, 5);
Set<Integer> targetSet = new HashSet<>(sourceList);
}

Как мы видим, процесс преобразования является типобезопасным и простым, поскольку конструкторы каждой коллекции принимают другую коллекцию в качестве источника.

2.2. С гуавой

Давайте проделаем то же самое преобразование с использованием гуавы:

public void givenUsingGuava_whenListConvertedToSet_thenCorrect() {
List<Integer> sourceList = Lists.newArrayList(0, 1, 2, 3, 4, 5);
Set<Integer> targetSet = Sets.newHashSet(sourceList);
}

2.3. С коллекциями Apache Commons

Далее давайте воспользуемся API коллекций Commons для преобразования списка в набор:

public void givenUsingCommonsCollections_whenListConvertedToSet_thenCorrect() {
List<Integer> sourceList = Lists.newArrayList(0, 1, 2, 3, 4, 5);
Set<Integer> targetSet = new HashSet<>(6);
CollectionUtils.addAll(targetSet, sourceList);
}

2.4. С Java 10

Одним из дополнительных вариантов является использование статического фабричного метода Set.copy, представленного в Java 10:

public void givenUsingJava10_whenListConvertedToSet_thenCorrect() {
List sourceList = Lists.newArrayList(0, 1, 2, 3, 4, 5);
Set targetSet = Set.copyOf(sourceList);
}

Обратите внимание, что набор, созданный таким образом, не подлежит изменению.

3. Преобразуйте набор в список

3.1. С помощью простой Java

Теперь давайте выполним обратное преобразование из набора в список, используя Java:

public void givenUsingCoreJava_whenSetConvertedToList_thenCorrect() {
Set<Integer> sourceSet = Sets.newHashSet(0, 1, 2, 3, 4, 5);
List<Integer> targetList = new ArrayList<>(sourceSet);
}

3.2. С гуавой

Мы можем сделать то же самое, используя раствор гуавы:

public void givenUsingGuava_whenSetConvertedToList_thenCorrect() {
Set<Integer> sourceSet = Sets.newHashSet(0, 1, 2, 3, 4, 5);
List<Integer> targetList = Lists.newArrayList(sourceSet);
}

Это очень похоже на подход java, только с немного меньшим количеством дублированного кода.

3.3. С коллекциями Apache Commons

Теперь давайте посмотрим на решение Commons Collections для преобразования набора в список:

public void givenUsingCommonsCollections_whenSetConvertedToList_thenCorrect() {
Set<Integer> sourceSet = Sets.newHashSet(0, 1, 2, 3, 4, 5);
List<Integer> targetList = new ArrayList<>(6);
CollectionUtils.addAll(targetList, sourceSet);
}

3.4. С Java 10

Наконец, мы можем использовать List.copyOf, который был представлен в Java 10:

public void givenUsingJava10_whenSetConvertedToList_thenCorrect() {
Set<Integer> sourceSet = Sets.newHashSet(0, 1, 2, 3, 4, 5);
List<Integer> targetList = List.copyOf(sourceSet);
}

Мы должны иметь в виду, что полученный список не подлежит изменению.

Оригинал статьи: https://www.baeldung.com/convert-list-to-set-and-set-to-list