java_stream_grouping by

183 阅读1分钟
按班级分组
Map<String, List<Student>> collect = students.stream().collect(
    Collectors.groupingBy(Student::getClassNumber)
);
嵌套分组
Map<String, Map<Integer, List<Student>>> collect = students.stream().collect(
    Collectors.groupingBy(Student::getClassNumber, Collectors.groupingBy(Student::getAge))
);
按照班级分组得到每个班级的同学姓名
Map<String, List<String>> collect = students.stream().collect(
    Collectors.groupingBy(
        Student::getClassNumber, Collectors.mapping(Student::getName, Collectors.toList())
    )
);
// {"700":["李四","钱七"],"701":["张三","赵六","老八"],"703":["王五"]}
按班级分组求每个同学的总成绩
Map<String, Map<String, Integer>> collect = students.stream().collect(
    Collectors.groupingBy(
        Student::getClassNumber, 
        Collectors.toMap(Student::getName, student -> student.getMathScores() + student.getChainessScores())
    )
);
//{"700":{"钱七":150,"李四":160},"701":{"张三":168,"老八":148,"赵六":137},"703":{"王五":172}}