Автор оригинала: 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() { ListsourceList = Arrays.asList(0, 1, 2, 3, 4, 5); Set targetSet = new HashSet<>(sourceList); }
Как мы видим, процесс преобразования является типобезопасным и простым, поскольку конструкторы каждой коллекции принимают другую коллекцию в качестве источника.
2.2. С Гуавой
Давайте сделаем то же самое преобразование с помощью гуавы:
public void givenUsingGuava_whenListConvertedToSet_thenCorrect() { ListsourceList = 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() { ListsourceList = 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() { SetsourceSet = Sets.newHashSet(0, 1, 2, 3, 4, 5); List targetList = new ArrayList<>(sourceSet); }
3.2. С Гуавой
Мы можем сделать то же самое, используя решение гуавы:
public void givenUsingGuava_whenSetConvertedToList_thenCorrect() { SetsourceSet = 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() { SetsourceSet = 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() { SetsourceSet = Sets.newHashSet(0, 1, 2, 3, 4, 5); List targetList = List.copyOf(sourceSet); }
Мы должны иметь в виду, что результирующий Список является неизменяемым .
4. Заключение
Реализацию всех этих примеров и фрагментов кода можно найти на GitHub. Это проект на основе Maven, поэтому его должно быть легко импортировать и запускать как есть.