开发避坑指南(45):Java Stream 求两个List的元素交集
需求
java 中如何用stream求两个List元素的交集?
代码实现
直接上代码
public class ListTest {public static void main(String[] args) {List<Integer> list1 = new ArrayList<>();list1.add(1);list1.add(2);list1.add(3);List<Integer> list2 = new ArrayList<>();list2.add(4);list2.add(5);list2.add(3);list2.add(2);//求元素交集List<Integer> intersectionList = list1.stream().filter(list2::contains).collect(Collectors.toList());intersectionList.forEach(System.out::println);}
}
输出结果是2和3。
语法说明
(1).stream()表示返回一个以本集合为数据源的顺序流。
(2).filter()表示返回由当前流中符合给定谓词条件的元素组成的新流。参数可以是一个Lambda表达式或方法引用。
(3)list2::contains用于定于过滤条件。该写法是函数式编程中的方法引用写法,等价于e -> list2.contains(e)。也就是.filter(e -> list2.contains(e))。
(4).collect(Collectors.toList())方法是Java Stream API中的终止操作,主要用于将流中的元素收集到目标容器或进行复杂的数据归约操作