看完你還不懂,你直接噴··
定義:
1.List是一個(gè)裝Dto對(duì)象的集合
2.Dto里面有ID屬性,name屬性等等
3.Dto里面的ID會(huì)重復(fù)
?現(xiàn)在要把List轉(zhuǎn)成以ID為key值的map,明顯key不能重復(fù)啊,所以應(yīng)該怎么操作呢?
(需要你有java8Stream流的基本概念,map的基本概念)
?操作1:重復(fù)key,選擇保留其中一個(gè)value值
代碼:
Map<String, Dto> dataMap = List.stream().collect(Collectors.toMap( e -> e.getId(), e -> e, (k1, k2)-> k1) );
解釋:這是一個(gè)流式操作
e -> e.getId() = 它把對(duì)象Dto中id取出來當(dāng)成key
e -> e = value的值就是本身對(duì)象Dto
(k1, k2)-> k1 = 并且解釋了當(dāng)key值重復(fù)時(shí)它會(huì)將第一個(gè)重復(fù)的值保留。
總結(jié):這樣的一個(gè)操作可以滿足key值重復(fù)時(shí)value值保留并且不報(bào)錯(cuò),但是還是有風(fēng)險(xiǎn),不知道你保留的具體是不是你要的值。
操作2:重復(fù)key,把value疊加到一個(gè)List集合中,到達(dá)按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; }) );
解釋:這是一個(gè)流式操作
e -> e.getId() = 它把對(duì)象Dto中id取出來當(dāng)成key
e -> {
? ? ? ? List<Dto> list = new ArrayList<>();
? ? ? ? list.add(e);
? ? ? ? return list;
}
?= value的值放入一個(gè)集合里面
( List<Dto> list1, List<Dto> list2)-> {
? ? ? ? list1.add(list2);
? ? ? ? return list1;
})
= 當(dāng)key值重復(fù)時(shí)它會(huì)將key值也就是id相同的數(shù)據(jù)都添加到一個(gè)集合對(duì)象中。文章來源:http://www.zghlxwxcb.cn/news/detail-799500.html
總結(jié):這樣的一個(gè)操作可以滿足key值重復(fù)時(shí)value值,按id分組得到一個(gè)Map<String, List<Dto>> dataMap對(duì)象文章來源地址http://www.zghlxwxcb.cn/news/detail-799500.html
到了這里,關(guān)于Java中用Stream流對(duì)List對(duì)象集合轉(zhuǎn)Map時(shí)key值重復(fù)的操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!