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;
}
}