[英]Performance Improvement in finding intersection between two nested lists in Java 8
[英]Intersection between nested lists java 8 streams
我有一個嵌套的Long
列表。 例如:
List<List<Long>> ids = [[1,2,3],[1,2,3,4],[2,3]];
有沒有辦法使用流來創建所有列表中存在的新項目列表:
List<Long> result = [2,3];
沒有流的解決方案非常簡潔:
List<Long> result = new ArrayList<>(ids.get(0));
ids.forEach(result::retainAll);
System.out.println(result);
更新 :正如@ernest_k在評論中提到的,以避免多余的retainAll()
調用,您可以在之前獲取子列表:
ids.subList(1, ids.size()).forEach(result::retainAll);
這是使用reduce
的(不太簡潔) Stream
版本:
List<Long> intersect = ids.stream()
.reduce(ids.get(0),
(l1,l2) -> {
l1.retainAll(l2);
return l1;
});
或者(如果我們想避免改變原始List
):
List<Long> intersect = ids.stream()
.reduce(new ArrayList<>(ids.get(0)),
(l1,l2) -> {
l1.retainAll(l2);
return l1;
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.