import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Student> students = new ArrayList<>();
students.add(new Student("Alice", 20, "Female"));
students.add(new Student("Bob", 22, "Male"));
students.add(new Student("Carol", 19, "Female"));
students.add(new Student("David", 21, "Male"));
students.add(new Student("Alice", 18, "Female")); // 添加一个同名学生以测试多个同名情况
Map<String, Map<String, Optional<Student>>> youngestByNameAndGender = students.stream()
.collect(Collectors.groupingBy(Student::getGender, // 先按性别分组
Collectors.groupingBy(Student::getName, // 再在每个性别组内按名字分组
Collectors.minBy(Comparator.comparingInt(Student::getAge))))); // 找出每个名字组内的最小年龄学生
youngestByNameAndGender.forEach((gender, mapByName) -> {
mapByName.forEach((name, student) -> {
student.ifPresent(s -> System.out.println("Gender: " + gender + ", Name: " + name + ", Youngest Student: " + s.getName() + " (" + s.getAge() + " years old)"));
});
});
}
public static class Student {
private String name;
private int age;
private String gender;
public Student(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getGender() {
return gender;
}
}
}
java根据学生实体类list先根据性别分组,再在每个组里再根据名字分组取最小的年龄的
最新推荐文章于 2024-07-10 21:37:49 发布