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

如何使用Java Streams将Student对象收集为Map<String, Map<String,String>>格式

核心实现逻辑如下:
你需要的1:1:多结构本质是双层嵌套Map,第一层key为学生姓名,第二层key为鞋码,第二层value为对应颜色集合,直接通过Stream的嵌套分组即可实现:


前置要求

首先确保你的Student实体类已生成对应属性的getter方法,示例实体规范写法参考:

class Student {
    // 变量名建议遵循Java小驼峰命名规范,原Color调整为color
    private String name;
    private String shoeSize;
    private String color;

    // 构造方法按需补充
    public Student(String name, String shoeSize, String color) {
        this.name = name;
        this.shoeSize = shoeSize;
        this.color = color;
    }

    // 必须的getter方法
    public String getName() {
        return name;
    }

    public String getShoeSize() {
        return shoeSize;
    }

    public String getColor() {
        return color;
    }
}

核心转换代码

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class ConvertDemo {
    public static void main(String[] args) {
        // 替换为你自己的原始Student集合数据源
        List<Student> originStudents = getTestData();

        // Stream转换核心逻辑
        Map<String, Map<String, List<String>>> targetStructure = originStudents.stream()
                .collect(Collectors.groupingBy(
                        // 第一层分组:按姓名分组
                        Student::getName,
                        Collectors.groupingBy(
                                // 第二层分组:同姓名下按鞋码分组
                                Student::getShoeSize,
                                // 映射收集同姓名同鞋码下的所有颜色
                                Collectors.mapping(Student::getColor, Collectors.toList())
                        )
                ));
        
        // 输出验证结构
        System.out.println(targetStructure);
    }

    // 模拟测试数据,可删除替换为你的真实数据源
    private static List<Student> getTestData() {
        return List.of(
                new Student("张三", "38", "白色"),
                new Student("张三", "38", "黑色"),
                new Student("张三", "39", "蓝色"),
                new Student("李四", "37", "粉色")
        );
    }
}

补充说明

如果需要对同分组下的颜色去重,将最内层的Collectors.toList()替换为Collectors.toSet()即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:06:02