Рубрики
Без рубрики

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

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

Автор оригинала: Eugen Paraschiv.

1. Обзор

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

Эта статья является частью серии “Java – Back to Basic” здесь, на Baeldung.

Дальнейшее чтение:

Как найти элемент в списке с помощью Java

Перетасовка Коллекций На Java

Проверьте, равны ли два списка в Java

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

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

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

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

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

2.2. С Гуавой

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

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

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

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

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

2.4. С Java 10

Одним из дополнительных вариантов является использование метода Set.copy static factory, введенного в 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 sourceSet = Sets.newHashSet(0, 1, 2, 3, 4, 5);
   List targetList = new ArrayList<>(sourceSet);
}

3.2. С Гуавой

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

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

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

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

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

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

3.4. С Java 10

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

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

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

4. Заключение

Реализацию всех этих примеров и фрагментов кода можно найти на GitHub. Это проект на основе Maven, поэтому его должно быть легко импортировать и запускать как есть.