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