public Map<String,Object> getChinaAreaMap(String date, String svccode, String currency){
List<FruitChinaAreaMapDto> listall = loutsFruitPadMapper.getChinaAreaMap(date,"”);
// 根据省份分组
final Map<String,List<FruitChinaAreaMapDto>> provMap = list.stream().collect(Collectors.groupingBy(FruitChinaAreaMapDto::getRegionname));
// 计算各省份利润之和
HashMap <String, BigDecimal> provMap_new = new HashMap<>();
// 关键代码
for(Map.Entry<String,List<FruitChinaAreaMapDto>> entry : provMap.entrySet()) {
BigDecimal temp = new BigDecimal(0);
for (FruitChinaAreaMapDto mapDto : entry.getValue()) {
temp = temp.add(mapDto.getProfit());
}
provMap_new.put(entry.getKey(),temp);
for (FruitChinaAreaMapDto mapDto : entry.getValue()){
if (temp.compareTo(BigDecimal.ZERO) == -1){
mapDto.setProfitable(0);//亏损
}else {
mapDto.setProfitable(1);//盈利
}
}
}
// 按人名去重
List<FruitChinaAreaMapDto> svclist = listall.stream().collect(Collectors.collectingAndThen(
Collectors.toCollection(() ->
new TreeSet<>(Comparator.comparing(o -> o.getSvcname() + ";" + o.getSvccode()))),ArrayList::new));
//svc列表按姓名升序排序
Collections.sort(svcLists,(MapSvcListDto o1,MapSvcListDto o2) -> Collator.getInstance(Locale.CHINESE).compare(o1.getSvcname(),o2.getSvcname()));
Map<String,Object> map = new HashMap<>();
map.put("list",list);
map.put("svclist",svcLists);
return map;
}
}
【map分组求和】map集合根据某一key分组,再对某一key对应的所有值求和
最新推荐文章于 2024-01-03 18:02:38 发布