BibekのKr。Bazaz:
次のように私たちは、学生のクラスを持っています:
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}
誰かがこのための効率的なソリューションを提案することはできますか?
また:
正しくないため、マージ機能の者は、あなたの代わりに使用する必要があること:
Map<String, Integer> map = studentList.stream()
.collect(Collectors.toMap(
student->student.getStudentName().toLowerCase(),
Student::getMarks,
(s1,s2) -> s1 +s2, // add values when merging
LinkedHashMap::new
));