看完你还不懂,你直接喷··
定义:
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相同的数据都添加到一个集合对象中。文章来源:https://www.toymoban.com/news/detail-799500.html
总结:这样的一个操作可以满足key值重复时value值,按id分组得到一个Map<String, List<Dto>> dataMap对象文章来源地址https://www.toymoban.com/news/detail-799500.html
到了这里,关于Java中用Stream流对List对象集合转Map时key值重复的操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!