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 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> dataMap = List.stream().collect(Collectors.toMap(

e -> e.getId(),

e -> {

        List list = new ArrayList();

        list.add(e);

        return list;

},

( List list1, List list2)-> {

        list1.add(list2);

        return list1;

})

);

解释:这是一个流式操作

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

e -> {

        List list = new ArrayList();

        list.add(e);

        return list;

}

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

( List list1, List list2)-> {

        list1.add(list2);

        return list1;

})

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

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

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/fb1f2d5065.html