取出对象中某一列数据,取出之后是list,list 通过 stream 流去重和转map

该篇博客详细介绍了如何使用Java集合流操作进行数据去重和分组。通过示例展示了基于多个字段的去重策略,如利用TreeSet和自定义比较器实现复杂字段的唯一性。同时,讲解了将列表转换为Map的过程,以及在遇到键冲突时的处理策略。此外,还提及了使用distinct()方法进行简单去重以及如何根据特定字段进行数据分组。

根据多个字段去重:
List distinctData = dtoList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o ->
o.getType() + “;” + o.getRegistNo() + “;” +
o.getRegistrantName() + “;” + o.getName() + “;” +
o.getProductNameCn() + “;” + o.getApprovalDate() + “;” +
o.getExpireDate()))), ArrayList::new));

List collectList1 = query.getInfoList().stream().map(MainVO::getReceiverId).collect(Collectors.toList());

List collectList2 = actList.stream().map(v -> v.getId()).collect(Collectors.toList());

List dtoList = actList.stream().map(v -> {
testDto dto = new testDto();
dto.setId(v.getId());
dto.setTagId(v.getTagId());
dto.setTagName(v.getCreatedBy());
dto.setUserId(v.getUserId());
return dto;
}).collect(Collectors.toList());
//list转map
Map<String, List> testMap = new HashMap<>();
testMap = dtoList.stream().collect(Collectors.groupingBy(testDto::getId));

testVOMap = testVOList.stream().collect(Collectors.toMap(testVO::getId, a -> a,(k1,k2)->k1));

testVO::getId 表示testVO中的getId 代表map的key
a -> a 表示原先的对象作为现在map的value
(k1,k2)->k1 表示当k1和k2值相同时 取k1

//去重
List areaList = areaPOList.stream().map(areaDetailPO::getAreaName).distinct().collect(Collectors.toList());

Map<String,String> Map1 =
resList.stream().collect(Collectors.toMap(k->
k.getCompanyName()+k.getProductName()+k.getOtherCompanyName()+k.getHospitalName()+k.getProductClassify()+k.getFileCode()+k.getStartTime()+k.getEndTime(), h->
h.getStartTime()+“;”+h.getCompanyName()+“;”+h.getOtherCompanyName()+“;”+h.getProductClassify()+“;”+h.getFileCode()+“;”+h.getEndTime(),(oldValue, newValue) -> newValue));
List List11 = resList.stream().map(k->
k.getStartTime()+“;”+k.getCompanyName()+“;”+k.getOtherCompanyName()+“;”+k.getProductClassify()+“;”+k.getFileCode()+“;”+k.getEndTime()).distinct().collect(Collectors.toList());
List List12 = resList.stream().map(k->
k.getCompanyName()+“;”+k.getProductLineName()+“;”+k.getOtherCompanyName()+“;”+k.getProductClassify()+k.getFileCode()).collect(Collectors.toList());

map1:
公司1产品线公司2产品分类文件编号2021-10-012022-11-30 -> 2021-10-01;公司1;公司2;产品线;文件编号;2022-11-30
List11:
2021-10-01;公司1;公司2;产品线;文件编号;2002-11-30
List12:
公司1;产品线;公司2;产品线文件编号

根据相同字段分组
mainVOList.stream().collect(Collectors.groupingBy(ScOutSockRecordMainVO::getAuthItemId));

参考:
https://blog.youkuaiyun.com/weixin_45476233/article/details/120989215

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值