需求
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中的終止操作,主要用于將流中的元素收集到目標容器或進行復雜的數據歸約操作