Java中的List和Set之间的转换

2023/06/09

1. 概述

在这个快速教程中,我们将看看List和Set之间的转换,从普通Java开始,然后使用Guava和Apache Commons Collections库,最后使用Java 10。

2. 将List转换为Set

2.1 使用纯Java

让我们从使用Java将List转换为Set开始:

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

正如我们所见,转换过程是类型安全且简单的,因为每个集合的构造函数都接受另一个集合作为源。

2.2 使用Guava

让我们使用Guava进行相同的转换:

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在List和Set之间进行转换:

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静态工厂方法:

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

请注意,以这种方式创建的Set是不可修改的。

3. 将Set转换为List

3.1 使用纯Java

现在让我们使用Java进行反向转换,从Set到List:

void givenUsingCoreJava_whenSetConvertedToList_thenCorrect() {
   Set<Integer> sourceSet = Sets.newHashSet(0, 1, 2, 3, 4, 5);
   List<Integer> targetList = new ArrayList<>(sourceSet);
}

3.2 使用Guava

我们可以使用Guava解决方案做同样的事情:

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的方法:

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

void givenUsingJava10_whenSetConvertedToList_thenCorrect() {
    Set<Integer> sourceSet = Sets.newHashSet(0, 1, 2, 3, 4, 5);
    List<Integer> targetList = List.copyOf(sourceSet);
}

需要记住的是,由此生成的List是不可修改的。

4. 总结

在本教程中,我们通过使用原始Java、Guava、Apache Commons Collections、以及Java 10介绍了如何将List和Set集合相互转换。

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章