1. Обзор
В этом кратком руководстве мы рассмотрим преобразование между списком
и набором,
начиная с Plain Java, используя Guava и библиотеку Apache Commons Collections и, наконец, с Java 10.
Эта статья является частью серии «Java — Back to Basic» здесь, на ForEach.
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. С гуавой
Давайте сделаем то же преобразование, используя Guava:
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 для преобразования между List
и Set
:
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. С Явой 10
Еще один вариант — использовать статический фабричный метод Set.copyOf
, представленный в Java 10:
public void givenUsingJava10_whenListConvertedToSet_thenCorrect() {
List sourceList = Lists.newArrayList(0, 1, 2, 3, 4, 5);
Set targetSet = Set.copyOf(sourceList);
}
Обратите внимание, что Set
, созданный таким образом, не поддается изменению .
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. С гуавой
Мы можем сделать то же самое, используя решение Guava:
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 для преобразования между Set
и List
:
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. С Явой 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);
}
Мы должны иметь в виду, что результирующий список
не поддается изменению .
4. Вывод
Реализацию всех этих примеров и фрагментов кода можно найти на GitHub. Это проект на основе Maven, поэтому его легко импортировать и запускать как есть.