У нас есть класс ученика следующим образом:
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 = 67, 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}
Может кто-нибудь предложить эффективное решение для этого?