我们有一个如下的
我们有一个学生列表如下:
我尝试通过以下方式解决这个问题:
有人能为此提供一个高效的解决方案吗?
Student
类:class Student {
private int marks;
private String studentName;
public int getMarks() {
return marks;
}
public void setMarks(int marks) {
this.marks = marks;
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public Student(String studentName, int marks) {
this.marks = marks;
this.studentName = studentName;
}
}
我们有一个学生列表如下:
List<Student> studentList = new ArrayList<>();
studentList.add(new Student("abc", 30));
studentList.add(new Student("Abc", 32));
studentList.add(new Student("ABC", 35));
studentList.add(new Student("DEF", 40));
这个列表需要转换成一个 HashMap<String, Integer>
,满足以下条件:
- 该映射不包含任何重复的学生
- 如果找到重复的学生姓名,则应将其分数与之前出现的相加。
因此输出应为:
{ABC = 97, DEF = 40}
我尝试通过以下方式解决这个问题:
Map<String, Integer> studentMap = studentList.stream()
.collect(Collectors.toMap(
student -> student.getStudentName().toLowerCase(),
student -> student.getMarks(),
(s1, s2) -> s1,
LinkedHashMap::new));
但合并函数不允许我连接标记,这将导致输出如下:
{abc = 30, DEF = 40}
有人能为此提供一个高效的解决方案吗?