当每个对象可以分为多个组时如何对对象进行分组?

2023-12-31

我有一个List<Student>其中每个Student可能有多种爱好:

public class StudentData {
    public static List<Student> getData() {
        return Arrays.asList(
            new Student(1, "a1", 1, Arrays.asList("cricket", "football", "basketball")),
            new Student(2, "a2", 1, Arrays.asList("chess", "football")),
            new Student(3, "a3", 2, Arrays.asList("running")),
            new Student(4, "a4", 2, Arrays.asList("throwball", "football")),
            new Student(5, "a5", 3, Arrays.asList("cricket", "basketball")),
            new Student(6, "a6", 4, Arrays.asList("cricket")), new Student(7, "a7", 5, Arrays.asList("basketball")),
            new Student(8, "a8", 6, Arrays.asList("football")),
            new Student(9, "a9", 8, Arrays.asList("tennis", "swimming")),
            new Student(10, "a10", 8, Arrays.asList("boxing", "running")),
            new Student(11, "a11", 9, Arrays.asList("cricket", "football")),
            new Student(12, "a12", 11, Arrays.asList("tennis", "shuttle")),
            new Student(13, "a13", 12, Arrays.asList("swimming"))
        );
    }
}

如何根据兴趣对学生进行分组?我尝试了下面的代码:

List<Student> data = StudentData.getData();
data.stream().collect(Collectors.groupingBy(s -> s.getHobbies().stream()));

它没有给出正确的答案。


你基本上需要一个Stream这是由一个Pair(我选择AbstractMap.SimpleEntry此处),左侧部分作为爱好,右侧部分作为学生(也可能是相反的情况,没关系)。

稍后只需根据Hobby(在你的情况下这是一个字符串)。

data.stream()
    .flatMap(student -> student.getHobbies().stream().map(hobby -> new SimpleEntry<>(hobby, student)))
    .collect(Collectors.groupingBy(
            Entry::getKey,
            Collectors.mapping(Entry::getValue, Collectors.toList())
));

Entry::getKey作为获取密钥的方法引用,如果对您更有意义,您也可以将其编写为 lambda 表达式:

Collectors.groupingBy(entry -> entry.getKey())
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当每个对象可以分为多个组时如何对对象进行分组? 的相关文章

随机推荐

  • axios 内部 for 循环

    我正在尝试在 for 循环内发送 axios 请求 但循环甚至在 axios 之前就已完成 以下是我的代码 let findEmail async gt for var i 0 i lt csvData length i axios pos
  • 如何在 Swift 中组合两个 Dictionary 实例?

    我如何附加一个Dictionary到另一个Dictionary使用斯威夫特 我正在使用AlamoFire将 JSON 内容发送到的库REST https en wikipedia org wiki Representational stat
  • 如何异步使用 Tornado 和 Redis?

    我正在尝试如何异步使用 Redis 和 Tornado 我找到了龙卷风 redis https github com leporo tornado redis但我需要的不仅仅是添加一个yield在代码中 我有以下代码 import redi
  • 如何用图像的像素创建图表?

    现在 我有一个图像 我想生成一个加权图 G V E 其中 V 是顶点集 E 是边集 图像中的每个像素作为图中的节点 但我不知道该怎么做 有人可以帮助我吗 最好是蟒蛇 非常感谢 问题补充 很抱歉我对问题的描述不够清楚 我的目标是使用图像的像素
  • 以编程方式设置 Jetty 配置以增加允许的 URL 长度

    我们使用嵌入式 Jetty 9 3 1 v20150714 并遇到了problem https stackoverflow com q 19549163 421049其中我们的长查询 URL 与其他标头相结合 比允许的长度要长 The so
  • 如何获取/设置 Firebase Cloud Functions v1 环境变量

    我以旧方式使用 Cloud Functions 包中的环境变量functions config 命令 但由于我更新到 v1 0 2 即使通过JSON parse process env FIREBASE CONFIG 就像文档告诉我的那样
  • 从机上的 Jenkins 工作空间路径不一致

    我们设置了一些共享工作空间的工作 各个分支的工作流程是 构建一个名为的大型 C 项目foo 执行多个下游测试 每个测试都使用foo 我们通过分配Use custom workspace构建工作区的下游作业领域 最近 我们选择了一个分支 并将
  • 在 iPhone X 上的 ARKit ARSession 期间从前置摄像头录制视频

    我正在使用一个ARSession结合一个ARFaceTrackingConfiguration来追踪我的脸 同时 我想从 iPhone X 的前置摄像头录制视频 为此 我使用AVCaptureSession但当我开始录音时ARSession
  • MongoDB 复合键

    我刚刚开始使用 MongoDb 我注意到我得到了很多重复的条目记录 而我本打算是唯一的 我想知道如何对我的数据使用复合键 并且我正在寻找有关如何创建它们的信息 最后 我使用 Java 来访问 mongo 和 morphia 作为我的 ORM
  • $(document).ready() 未针对 ajax 加载的内容执行

    在返回的部分页面中不执行 document ready 的原因可能是什么 两次工作正常 但第三次更新 html 后没有任何反应 alert html alert PopUpItem PopUpItem html html alert in
  • 在 Woocommerce 结帐中为特定选定的运输选项添加正文类别

    如果访问者在 Woocommerce 结账页面上处于特定的送货选项中 我会尝试向页面正文添加一个类 我已经完成了以下操作 但它没有添加课程 有人可以帮忙吗 add filter body class bbloomer wc product
  • 在使用 Transform 旋转时调整 UIView 的大小

    When my UIView使用变换属性旋转 CGAffineTransformMakeRotation 我需要拖动它的一个角 例如右下角 来调整它的大小 在此过程中 当用户拖动角时 视图的角必须跟随用户的手指 并通过增加 2 个边 右下角
  • 什么时候只需要 PartialEq 而不需要 Eq 比较合适?

    我在读铁锈书 https doc rust lang org book appendix 03 derivable traits html并尝试了解用例PartialEq and Eq特征 我意识到PartialEq适用于不一定是自反的关系
  • 动态代理和检查异常

    如何让我的动态代理抛出已检查的异常 我需要一个透明的接口包装器 它有时会抛出已检查的异常 例如IOException 没有第 3 方 AOP 或编写我自己的代理是否可以 手动修改接口的所有 20 个方法也不是一个选择 正如康拉德上面提到的
  • 进入设置屏幕

    我想从我的应用程序中打开 设置 gt 声音和显示 gt 电话铃声 屏幕 我怎样才能做到这一点 根据您的需要 有几种选择可以从您的应用程序中调出 铃声 设置屏幕 如果您想调出通常可通过系统设置访问的实际首选项屏幕 让用户通过应用程序修改手机的
  • 文件上传“multipart/form”异常 org.apache.commons.fileupload.FileUploadBase$InvalidContentTypeException

    我尝试使用 Apache Commons 进行文件上传 但抛出以下异常 org apache commons fileupload FileUploadBase InvalidContentTypeException 请求不包含 multi
  • Dropwizard 中的自定义 Jetty 过滤器

    我正在尝试在 Dropwizard 实例中添加自定义标头过滤器 以检查请求的版本是否与 Dropwizard 实例的版本同步 我看到你可以使用FilterBuilder添加码头CrossOriginFilters 但是 我无法弄清楚如何设置
  • 片段 popbackstack 行为在 25.1.0 和 25.1.1 中被破坏

    自从支持版本 25 1 0 和最新的 25 1 1 以来 我在片段替换 添加方面遇到了奇怪的行为 25 1 0 已报告问题Android fragmentTransaction replace 不适用于支持库 25 1 0 https st
  • Huggingface Transformer 问题答案置信度得分

    我们如何从huggingface转换器问题答案的示例代码中获取答案置信度得分 我看到管道确实返回了分数 但是下面的核心也可以返回置信度分数吗 from transformers import AutoTokenizer TFAutoMode
  • 当每个对象可以分为多个组时如何对对象进行分组?

    我有一个List