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

1. Общ преглед

В тази кратка статия ще разгледаме преобразуването между списък и набор - като започнем с обикновена Java, използваме Guava и библиотеката Apache Commons Collections и накрая с Java 10.

Тази статия е част от поредицата „Java - Back to Basic“ тук на Baeldung.

2. Конвертиране на списъка в Set

2.1. С обикновена Java

Нека започнем с преобразуване от списък в набор с помощта на Java :

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

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

2.2. W Ith гуава

Нека направим същото преобразуване, използвайки Guava:

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 Collections, за да конвертираме между списък и набор :

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.copyOf , въведен в Java 10:

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

Имайте предвид, че създаденият по този начин комплект не може да се модифицира.

3. Конвертиране на Set to List

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 за конвертиране между набор и списък :

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.copyOf, който е въведен в 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, така че трябва да е лесно да се импортира и да се изпълнява както е.