我有一个Collection<List<SomeObject>> values
如何使用Streams查找最大列表的集合?
我尝试了以下代码,但它并不能完全解决问题。
values.stream().max(e -> e.stream().max(List::size).get()).get()
但是我遇到了编译错误。 有什么想法吗?
我有一个Collection<List<SomeObject>> 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<List<SomeObject>> best, List<SomeObject> 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;
}
}));
Stream
的解决方案,可以在单次遍历中工作,尽管它需要相当多的工作。 - Louis Wasserman