使用stream的toMap()函数时,当key重复,系统会报错相同的key不能形成一个map,那么需要解决这个问题,
1、首先查看库中数据结构,相同人员编号存在多条关键词(arr_gic)
List xszyList = xszyMapper.query(TZhbaXszy.builder().cBjbrbhList(bjbrBhList).build().fetchAll());
//按照bjbrBh->xszy的映射,一个人多个摘要的时候,摘要进行拼接
Map<String, List> bjbrToZyMap = xszyList.stream().collect(Collectors.toMap(TZhbaXszy::getCBjbrbh, TZhbaXszy::getArrGjc));
报错:
2、解决方法
①相同key的情况下,丢弃重复的只随机保留一个
//bjbrBh->xszy的映射,一个人多个摘要的时候,摘要进行拼接
Map<String, List> bjbrToZyMap = xszyList.stream().collect(
Collectors.toMap(TZhbaXszy::getCBjbrbh, TZhbaXszy::getArrGjc,(g1,g2)->g2));
②相同key的情况下,把value变成list,形成Map(Object,List)的形式。
//bjbrBh->xszy的映射,一个人多个摘要的时候,摘要进行拼接
Map<String, List> bjbrToZyMap = xszyList.stream().collect(
Collectors.toMap(TZhbaXszy::getCBjbrbh, TZhbaXszy::getArrGjc,(
List oldList,List newList)->{
oldList.addAll(newList);
return oldList;
}));return bjbrToZyMap;
③相同key的情况下,丢弃重复的比较后保留一个
//bjbrBh->xszy的映射,一个人多个摘要的时候,摘要进行拼接
Map<String, List> bjbrToZyMap = xszyList.stream().collect(
Collectors.toMap(TZhbaXszy::getCBjbrbh, TZhbaXszy::getArrGjc,(g1,g2)->g1>=g2?g1:g2));