Java中用Stream流对List对象集合转Map时key值重复的操作

看完你还不懂,你直接喷··

定义:

1.List是一个装Dto对象的集合

2.Dto里面有ID属性,name属性等等

3.Dto里面的ID会重复

 现在要把List转成以ID为key值的map,明显key不能重复啊,所以应该怎么操作呢?

(需要你有java8Stream流的基本概念,map的基本概念)

 操作1:重复key,选择保留其中一个value值

代码:

Map<String, Dto> dataMap = List.stream().collect(Collectors.toMap(

e -> e.getId(),

e -> e,

(k1, k2)-> k1)

);

解释:这是一个流式操作

e -> e.getId() = 它把对象Dto中id取出来当成key

e -> e = value的值就是本身对象Dto

(k1, k2)-> k1 = 并且解释了当key值重复时它会将第一个重复的值保留。

总结:这样的一个操作可以满足key值重复时value值保留并且不报错,但是还是有风险,不知道你保留的具体是不是你要的值。

操作2:重复key,把value叠加到一个List集合中,到达按id分组的效果

代码:

Map<String, List<Dto>> dataMap = List.stream().collect(Collectors.toMap(

e -> e.getId(),

e -> {

        List<Dto> list = new ArrayList<>();

        list.add(e);

        return list;

},

( List<Dto> list1, List<Dto> list2)-> {

        list1.add(list2);

        return list1;

})

);

解释:这是一个流式操作

e -> e.getId() = 它把对象Dto中id取出来当成key

e -> {

        List<Dto> list = new ArrayList<>();

        list.add(e);

        return list;

}

 = value的值放入一个集合里面

( List<Dto> list1, List<Dto> list2)-> {

        list1.add(list2);

        return list1;

})

= 当key值重复时它会将key值也就是id相同的数据都添加到一个集合对象中。

总结:这样的一个操作可以满足key值重复时value值,按id分组得到一个Map<String, List<Dto>> dataMap对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值