Перетворення між списком та набором у Java

1. Огляд

У цій короткій статті ми розглянемо перетворення між списком та набором - починаючи з звичайної Java, використовуючи Guava та бібліотеку Apache Commons Collections, і, нарешті, з Java 10.

Ця стаття є частиною серії "Java - Назад до основного" тут, на Baeldung.

2. Перетворити список на встановлений

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 гуави

Давайте зробимо те саме перетворення за допомогою гуави:

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

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, тому його слід легко імпортувати та запускати як є.