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