我有一个嵌套列表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
提交
取消