Java 8 Stream - 查找最大的嵌套列表 [英] Java 8 Stream - Find largest nested list

查看:1036
本文介绍了Java 8 Stream - 查找最大的嵌套列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个集合< List< SomeObject>>值

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

How can I find the collection with the largest list using Streams?

我尝试了类似的东西,但它不能正常工作

I have tried something like this, but it doesn't quite work

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



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

But I get compilation error. Any ideas?

推荐答案

我想你想要

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

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

If you need duplicates, the best solution I can think of would be something like

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

这篇关于Java 8 Stream - 查找最大的嵌套列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆