public class Student {
String name;
int age;
}
我有一个Student
对象列表,我需要根据特定逻辑对它们进行分组:
- 将姓名以“A”开头的所有学生分组
- 将姓名以“P”开头的所有学生分组
- 将所有年龄大于或等于 30 岁的学生分组
到目前为止,我做了什么:
List<Student> students = List.of(
new Student("Alex", 31),
new Student("Peter", 33),
new Student("Antony", 32),
new Student("Pope", 40),
new Student("Michel", 30));
Function<Student, String> checkFunction = e -> {
if (e.getName().startsWith("A")) {
return "A-List";
} else if (e.getName().startsWith("P")) {
return "P-List";
} else if (e.getAge() >= 30) {
return "30's-List";
} else {
return "Exception-List";
}
};
Map<String, List<Student>> result = students.stream().collect(Collectors.groupingBy(checkFunction));
for (var entry : result.entrySet()) {
System.out.println(entry.getKey() + "---");
for (Student std : entry.getValue()) {
System.out.println(std.getName());
}
}
输出
A-List---
Alex
Antony
P-List---
Peter
Pope
30's-List---
Michel
我理解我所遵循的这个逻辑是错误的,这就是为什么 30 的列表没有正确填充的原因。真的有可能groupingBy()
吗?