Java 8 Stream – 查找最大的嵌套列表

我有一个Collection<List> values

如何使用Streams找到包含最大列表的集合?

我尝试过类似的东西,但它并不常用

 values.stream().max(e -> e.stream().max(List::size).get()).get() 

但是我得到了编译错误。 有任何想法吗?

我想你想要的

  values.stream().max(Comparator.comparingInt(List::size)).get() 

如果你需要重复,我能想到的最佳解决方案就是这样的

 values.stream() .collect(Collector.of( ArrayList::new, (List> best, List elem) -> { if (best.isEmpty()) { best.add(elem); } else if (best.get(0).size() < elem.size()) { best.clear(); best.add(elem); } }, (best1, best2) -> { if (best1.isEmpty() || best2.isEmpty() || best1.get(0).size() == best2.get(0).size()) { best1.addAll(best2); return best1; } else if (best1.get(0).size() > best2.get(0).size()) { return best1; } else { return base2; } })); 

我的StreamEx库提供了一个现成的收集器来查找所有最大元素:

 List> result = values.stream() .collect(MoreCollectors.maxAll(Comparator.comparingInt(List::size)));