Java Stream - 当键出现在列表中时进行分组

2024-05-06

我正在尝试按对象中显示为列表的值对集合进行分组。

这是我的模型

public class Student {
  String stud_id;
  String stud_name;
  List<String> stud_location = new ArrayList<>();

  public Student(String stud_id, String stud_name, String... stud_location) {
      this.stud_id = stud_id;
      this.stud_name = stud_name;
      this.stud_location.addAll(Arrays.asList(stud_location));
  }
}

当我用以下命令初始化它时:

    List<Student> studlist = new ArrayList<Student>();
    studlist.add(new Student("1726", "John", "New York","California"));
    studlist.add(new Student("4321", "Max", "California"));
    studlist.add(new Student("2234", "Andrew", "Los Angeles","California"));
    studlist.add(new Student("5223", "Michael", "New York"));
    studlist.add(new Student("7765", "Sam", "California"));
    studlist.add(new Student("3442", "Mark", "New York"));

我想得到以下内容:

California -> Student(1726),Student(4321),Student(2234),Student(7765)
New York -> Student(1726),Student(5223),Student(3442)
Los Angeles => Student(2234)

我尝试写以下内容

  Map<Student, List<String>> x = studlist.stream()
            .flatMap(student -> student.getStud_location().stream().map(loc -> new Tuple(loc, student)))
            .collect(Collectors.groupingBy(y->y.getLocation(), mapping(Entry::getValue, toList())));

但我在完成它时遇到了困难 - 映射后如何保留原来的学生?


总结以上评论,收集到的智慧建议:

Map<String, List<Student>> x = studlist.stream()
            .flatMap(student -> student.getStud_location().stream().map(loc -> new AbstractMap.SimpleEntry<>(loc, student)))
            .collect(Collectors.groupingBy(Map.Entry::getKey, Collectors.mapping(Map.Entry::getValue, toList())));

作为一种替代方法,如果您不介意每个列表中的学生仅包含该位置,您可以考虑将学生列表展平为仅包含一个位置的学生:

Map<String, List<Student>> x = studlist.stream()
        .flatMap( student ->
                student.stud_location.stream().map( loc ->
                        new Student(student.stud_id, student.stud_name, loc))
        ).collect(Collectors.groupingBy( student -> student.stud_location.get(0)));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java Stream - 当键出现在列表中时进行分组 的相关文章

随机推荐

  • foo.Name undefined(类型接口{}没有字段或方法名称)

    我使用本机 golang 包 container list 来管理堆栈中的 inotify 事件 当我访问堆栈的项目时 我的类型失败 我认为 import golang org x exp inotify container list lo
  • C# 接口实现关系只是“Can-Do”关系?

    今天有人告诉我 C 中的接口实现只是 Can Do 关系 而不是 Is A 关系 这与我长期以来所相信的LSP 里氏替换原理 相冲突 我一直认为所有的继承都应该意味着 Is A 关系 所以 如果接口实现只是一种 Can Do 关系 如果有一
  • UICollectionView 单元格旋转后不水平

    我有一个 UICollectionView 带有一个用于创建单元格的按钮 该单元格应按创建顺序显示 在空间允许的情况下 横向和纵向 1 2 3 4 文本视图受到灵活宽度的限制以填充单元格 单元格的大小取决于设备和旋转 每行允许 1 2 3
  • 是否可以仅在一张表上运行“symfonydoctrine build --all”任务?

    如果我运行以下任务 它会构建所有内容并清除数据库 php symfony doctrine build all 我希望此任务仅针对我放入 schema yml 的新表运行 是否可以 我认为你应该为此使用迁移 首先 您需要恢复初始状态 当模式
  • 实时搜索错误

    我正在获取用户偏好和角色 一切正常并且数据接收正确 默认值放置在单选按钮上以突出显示用户当前拥有的选项 我正在使用 Antd Design Table 组件 问题 当我将用户首选项更改为打印文档时 它确实通过数据库的状态成功更改了它 但是现
  • “该网站似乎使用了滚动链接定位效果。这可能不适用于异步平移”

    我从 Firefox 收到了这个不寻常的警告 它所指的定位效果是div我将旋转作为滚动高度的一个因素 我从来没有遇到过任何问题 但是这是我应该担心的事情吗 如果没有这个警告 是否有这样的效果 演示此问题的 JavaScript 是 gear
  • 有没有一种有效的方法来优化我的序列化代码?

    这个问题缺乏细节 因此 我决定创建另一个问题而不是编辑这个问题 新问题在这里 我可以并行化我的代码吗 还是不值得 https stackoverflow com questions 17937438 can i parallelize my
  • 将左按钮添加到 UINavigationBar (iPhone)

    我创建了一个新的基于导航的 iPhone 应用程序 我将其添加到 RootViewController 中 void viewDidLoad super viewDidLoad UIBarButtonItem addButton UIBar
  • Qt 远程文件浏览器

    我想知道是否有人使用过 Qt 远程文件浏览器 根据我的理解 我有两个选择 当涉及到远程文件时 将 QFileDilaog 与自定义代理模型结合使用 该模型将负责提供远程文件 目录结构 使用自定义对话框 并为本地文件提供标准文件系统模型 为远
  • Windows Phone 7 中的 ASCII 编码

    有没有办法在 Windows Phone 7 中使用 ASCIIEncoding 除非我做错了什么Encoding ASCII不存在 我需要它来进行 C gt PHP 加密 因为 PHP 在 SHA1 加密中仅使用 ASCII 有什么建议么
  • 如何使用 Qt Test 控制 QFileDialog?

    我有两个问题 我怎样才能访问QFileDialog并使用 Qt Test 模块在 文件名 字段中写入文件的路径 我这么问是因为我正在 Qt 中开发一些 GUI 测试 现在我需要打开一个文本文件 以下代码创建QFileDialog并获取文件路
  • 以编程方式清除 Silverlight 应用程序存储?

    我为一些客户发布了 Silverlight 应用程序 我在发布更新时遇到问题 我希望当用户最初加载网页时 如果他们的应用程序存储比上次更新网站时旧 那么this http www softcity com article internet
  • Outlook Interop C# 排序项目不起作用

    我偶然发现了一个问题 即 Outlook 项目表排序方法没有给出所需的结果 尽管方法 GetLast 始终返回相同的电子邮件项目 无论是升序还是降序 代码如下 Application olApp new Application NameSp
  • 如何从JSP中获取java类的对象

    我有一个结果jsp页面 它打印java类的字符串变量 有人能给我任何想法吗 我使用简单的 httpServlet 作为操作类 Class A String name public void setName this name callMet
  • 如何在机器人框架中使用“Run Keyword If”

    我刚刚开始研究机器人框架 我正在尝试使用Try Keyword If关键字 但我在网上看到的所有示例都在一行中显示了解决方案 而我在 RIDE 中有列和行 如果当前页面上有一个 ID 为 当前状态 的按钮 那么我想访问 URL www xy
  • React Router V5 在路由中使用上下文变量的最佳方式

    在我的应用程序中 我定义了路线 如下所示
  • lxml etree xmlparser 删除不需要的命名空间

    我有一个 xml 文档 我正在尝试使用 Etree lxml 解析它
  • 为什么持有引用的类可以复制?

    如果有一个类持有引用 我希望以下代码会惨败 但它可以编译 include
  • 停止所有 JavaScript 执行

    是否有一个相当于 php die 函数的 javascript 可以停止所有 javascript 包括将来的 ajax 请求回调 超时等 运行 注意 我无法在调试器中使用断点 因为 bug 存在于 ie8 中 并且调试器会阻止您在断点处向
  • Java Stream - 当键出现在列表中时进行分组

    我正在尝试按对象中显示为列表的值对集合进行分组 这是我的模型 public class Student String stud id String stud name List