从Effective java中解锁操作map的方法

该代码示例展示了如何使用Java8的StreamAPI对Student对象列表进行操作。首先,通过Collectors.groupingBy方法将学生按成绩分组,然后利用Map的merge方法结合lambda表达式找到每个学生的所有成绩中的最高分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

students.stream().collect(Collectors.groupingBy(Student::getGrade));
maxGradeGradeMap.merge(student.getName(), student.getGrade(), (grade1, grade2) -> grade1 > grade2 ? grade1 : grade2);

@Slf4j
public class MapUtils {

public static void main(String[] args) {
    List<Student> students = getStudents();
    //按照成绩划分,将相同成绩的学生分到一个list中
    //stream的Collectors.groupingBy
    Map<Integer, List<Student>> sameGradeMap = students.stream().collect(Collectors.groupingBy(Student::getGrade));
    log.info("sameGradeMap: {}", JSONObject.toJSONString(sameGradeMap));

    //map的merge方法,得到某个学生最高的成绩
    Map<String, Integer> maxGradeGradeMap = new HashMap<>();
    List<Student> students1 = getSubjectStudents();
    for (Student student : students1) {
        maxGradeGradeMap.merge(student.getName(), student.getGrade(), (grade1, grade2) -> grade1 > grade2 ? grade1 : grade2);
    }

    log.info("maxGradeGradeMap: {}", JSONObject.toJSONString(maxGradeGradeMap));
}

private static List<Student> getStudents() {
    List<Student> students = new ArrayList<>();
    Student student1 = new Student("1", "mike", "", 78);
    Student student2 = new Student("2", "lucy", "", 90);
    Student student3 = new Student("3", "ms", "", 89);
    Student student4 = new Student("4", "kk", "", 45);
    Student student5 = new Student("5", "ll", "", 65);
    Student student6 = new Student("6", "ee", "", 78);

    students.add(student1);
    students.add(student2);
    students.add(student3);
    students.add(student4);
    students.add(student5);
    students.add(student6);
    return students;
}


private static List<Student> getSubjectStudents() {
    List<Student> students = new ArrayList<>();
    Student student1 = new Student("1", "mike", "语文", 78);
    Student student2 = new Student("1", "mike", "数学", 90);
    Student student3 = new Student("1", "mike", "英语", 89);
    Student student4 = new Student("1", "mike", "化学", 45);
    Student student5 = new Student("1", "mike", "物理", 65);
    Student student6 = new Student("1", "mike", "生物", 78);

    students.add(student1);
    students.add(student2);
    students.add(student3);
    students.add(student4);
    students.add(student5);
    students.add(student6);
    return students;
}

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值