gpt4 book ai didi

java - 使用 Java 8 Streams 将 List 转换为 Map 使得 String 不是重复值
转载 作者:塔克拉玛干 更新时间:2023-11-03 04:48:19 29 4
gpt4 key购买 nike

我们有一个 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>这样:

  1. map 不包含任何重复的学生
  2. 如果发现重复的学生姓名,他的分数应加上上次出现。

所以输出应该是:

{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}

有人可以为此提出有效的解决方案吗?

最佳答案

那是因为合并函数不正确,你应该改用:

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));

关于java - 使用 Java 8 Streams 将 List<Object> 转换为 Map<String, Integer> 使得 String 不是重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54274392/

29 4 0