热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

将List<Object>转换为Map<String,Integer>,使得String不是使用Java8Streams的重复值

如何解决《将List<Object>转换为Map<String,Integer>,使得String不是使用Java8Streams的重复值》经验,为你挑选了2个好方法。

我们有一个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 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内容:

    地图不包含任何重复的学生

    如果找到重复的学生姓名,他的标记应与前一次出现相加.

所以输出应该是:{ABC = 67,DEF = 40}


我试图解决这个问题如下:

Map studentMap = studentList.stream()
            .collect(
                    Collectors.toMap(
                            student->student.getStudentName().toLowerCase(),
                            student -> student.getMarks(),
                            (s1,s2) -> s1,
                            LinkedHashMap::new
                            )
            );

但是合并函数不允许我连接标记,这会将输出返回为

所以输出应该是:{abc = 30,DEF = 40}

有人可以建议一个有效的解决方案吗?



1> Naman..:

这是因为合并函数不正确,您应该使用:

Map map = studentList.stream()
        .collect(Collectors.toMap(
                        student->student.getStudentName().toLowerCase(),
                        Student::getMarks,
                        (s1,s2) -> s1 +s2, // add values when merging
                        LinkedHashMap::new
                ));



2> Eran..:

另一种解决方案是使用groupingBy具有summingInt:

Map studentMap = 
    studentList.stream()
               .collect(Collectors.groupingBy(s -> s.getStudentName().toLowerCase(),
                                              Collectors.summingInt(Student::getMarks)));


推荐阅读
author-avatar
手机用户2502911627_202
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有