1. Общий обзор
В этом кратком руководстве мы рассмотрим преобразование между списком и набором, начиная с обычной 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