为了账号安全,请及时绑定邮箱和手机立即绑定

嵌套列表java 8流之间的交集

嵌套列表java 8流之间的交集

守候你守候我 2022-06-23 17:18:07
我有一个嵌套列表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); 


查看完整回答
反对 回复 2022-06-23
?
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;
                                  });


查看完整回答
反对 回复 2022-06-23
  • 2 回答
  • 0 关注
  • 115 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号