我有一個嵌套列表Long。例如:List<List<Long>> ids = [[1,2,3],[1,2,3,4],[2,3]];有沒有辦法使用流來創建所有列表中存在的項目的新列表:List<Long> result = [2,3];
2 回答

慕工程0101907
TA貢獻1887條經驗 獲得超5個贊
沒有流的非常簡潔的解決方案:
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);

qq_遁去的一_1
TA貢獻1725條經驗 獲得超8個贊
這是一個(不太簡潔)Stream
版本,使用reduce
:
List<Long> intersect = ids.stream() .reduce(ids.get(0), (l1,l2) -> { l1.retainAll(l2); return l1; });
或者(如果我們想避免改變原來List
的 s):
List<Long> intersect = ids.stream() .reduce(new ArrayList<>(ids.get(0)), (l1,l2) -> { l1.retainAll(l2); return l1; });
添加回答
舉報
0/150
提交
取消