如何使用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
相关产品推荐
相关产品推荐

