栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java 8 Collectors分组及Collectors.mapping使用案例

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java 8 Collectors分组及Collectors.mapping使用案例

Java 8 Collectors分组及Collectors.mapping使用案例 今天学习的考核中,导师给出了一个需求:

利用java8 lambdas语言特性处理如下java集合对象,
为了方便描述对象用json表示为[{id:1,name:null},{id:1,name:”liwei”},{id:2,name:”zhansan”},{id:2,name:”lisi”}]
期望处理后的集合对象为[{id:1,name:[liwei]},{id:2, name:[zhansan,lisi] }]

最开始拿到需求的时候想了很久都没做出来,使用Collectors分组时也只实现了对id或name的分组,并未考虑到对两个都进行分组。咨询了做了一年多开发的同学才帮我正确解答。

具体代码实现如下:

//创建Person实体类:
public class Person {
    private Integer id;
    private String name;

    public Person(Integer id) {
        this.id = id;
    }

    public Person() {
    }

    public Person(Integer id, String name) {
        this.id = id;
        this.name = name;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

创建接收处理后的对象类:

public class PersonV2s {
    private Integer id;
    private List names;

    public PersonV2s(Integer id, List names) {
        this.id = id;
        this.names = names;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public List getNames() {
        return names;
    }

    public void setNames(List names) {
        this.names = names;
    }
}
利用lambda进行数据处理
public class LambdaDemo2 {
    @Test
    public void test() {
        List personList = Arrays.asList(
                new Person(1),
                new Person(1, "liwei"),
                new Person(2, "zhansan"),
                new Person(2, "lisi")
        );
        final Map> map
                = personList.stream().collect(Collectors.groupingBy(Person::getId, Collectors.mapping(Person::getName, Collectors.toList())));
        final List personV2ss
                = map.entrySet().stream().map(p -> new PersonV2s(p.getKey(), p.getValue().stream().filter(Objects::nonNull).collect(Collectors.toList()))).collect(Collectors.toList());
        System.out.println(personV2ss.toString());
    }

}
最主要开始不熟悉Collectors方法的使用,导致一直未实现。对于java 8 新出的强大的Stream API,极大的简便了开发。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/389841.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号