有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

集合Java 8流查找最大嵌套列表

我有一个Collection<List<SomeObject>> values

如何使用Streams查找具有最大列表的集合

我试过这样的东西,但不太管用

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

但我得到了编译错误。 有什么想法吗


共 (2) 个答案

  1. # 1 楼答案

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

    List<List<SomeObject>> result = values.stream()
                    .collect(MoreCollectors.maxAll(Comparator.comparingInt(List::size)));
    
  2. # 2 楼答案

    我想你想要

     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;
            }
          }));