You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Stream收集嵌套Map:构建以出生日期为键的多层映射

构建嵌套分组Map

定义的Data类

public class Data {
    String name;
    String dateOfBirth;
    String dateAttendedClass;
}

需求

现有一个Data类型的列表,需要构建如下结构的嵌套Map:

Map<String, Map<String, List<String>>>
// 结构说明:Map<dateOfBirth, Map<name, list(dateAttendedClass)>>

已实现的代码

目前已经实现了按name分组,对应dateAttendedClass列表的Map:

Map<String, List<String>> nameAttendedClassMap = data.stream()
        .collect(Collectors.groupingBy(Data::getName,
                Collectors.mapping(Data::getDateAttendedClass, Collectors.toList())));

现在需要进一步构建以dateOfBirth为顶级键的嵌套Map。


解决方案

直接使用嵌套的groupingBy即可完成需求,外层按dateOfBirth分组,内层继续按name分组,同时指定内层的收集器为dateAttendedClass的列表:

Map<String, Map<String, List<String>>> dobNameAttendedMap = data.stream()
        .collect(Collectors.groupingBy(
                Data::getDateOfBirth, // 外层键:dateOfBirth
                Collectors.groupingBy(
                        Data::getName, // 内层键:name
                        Collectors.mapping(Data::getDateAttendedClass, Collectors.toList()) // 内层值:dateAttendedClass列表
                )
        ));

代码说明

  • 外层groupingBy(Data::getDateOfBirth):将所有Data对象先按dateOfBirth分组,每个分组对应一个子Map。
  • 内层groupingBy(Data::getName, ...):对每个dateOfBirth分组内的对象,再按name分组,每个name对应的是该用户所有的dateAttendedClass列表。

这样就能直接得到你需要的嵌套Map结构。


内容的提问来源于stack exchange,提问作者user3809938

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 05:52:18