1. 概述
本文我们将学习如何使用Java 8 Stream,获取两个List的交集。
2. 字符串List交集
下面我们创建了两个含有交集元素的 List<String>
,且包含重复元素。
List<String> list = Arrays.asList("red", "blue", "blue", "green", "red");
List<String> otherList = Arrays.asList("red", "green", "green", "yellow");
利用Stream方法,我们可以轻松实现:
Set<String> result = list.stream()
.distinct()
.filter(otherList::contains)
.collect(Collectors.toSet());
Set<String> commonElements = new HashSet(Arrays.asList("red", "green"));
Assert.assertEquals(commonElements, result);
首先,用 distinct 删除重复的元素。然后,我们使用 filter 筛选出同时包含在otherList中的元素。
最后,我们使用 Collector 转换输出。交集应该只包含每个共同的元素一次。顺序无关紧要,因此 toSet 是最直接的选择,但我们也可以使用 toList 或其他收集器方法。
更多学习 Java 8’s Collectors 使用指南.
3. 自定义类List求交集
如果List的元素类型不是String,而是我们自定义的Class如何实现呢?
此时我们只需要重写 equals 方法即可。
进一步了解 equals
方法,请学习 Java equals() 和 hashCode()。
4. 总结
本文我们学习了如何使用 Stream API 求两个List之间的交集。
示例中的代码存放在 GitHub.