用Java在List和Set之間轉換

1.概述

在這篇簡短的文章中,我們將看一下**列表集合之間的轉換**-從普通Java開始,使用Guava和Apache Commons Collections庫,最後從Java 10開始。

本文是Baeldung上的“ Java – Back to Basic”系列的一部分。

進一步閱讀:

如何使用Java在列表中查找元素

看一下在Java中查找列表中元素的一些快速方法

閱讀更多→

在Java中改組集合

了解如何使用Java整理各種集合。

閱讀更多→

檢查Java中兩個列表是否相等

一篇簡短的文章重點討論測試兩個List實例是否包含完全相同順序的相同元素的常見問題。

閱讀更多→

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。瓦特i個番石榴

讓我們使用番石榴做同樣的轉換:

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 Collections

接下來,讓我們使用Commons Collections API在ListSet之間進行轉換:

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

另一種選擇是使用Java 10中引入的Set.copyOf靜態工廠方法:

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進行從SetList的反向轉換:

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 Collections

現在讓我們看一下在集合列表之間轉換的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

最後,我們可以使用Java 10中引入的List.copyOf

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的項目,因此應該很容易直接導入和運行。