**现已经有接口实现下面的列表,需要查询上面的总数?不同的包装单位需要单独统计
(签收数量和使用数量是int类型,在返回的时候用 (fhsl||BZZHBDW) fhsl 拼接到一块了,bzzhbdw是包装转换比单位)
List<ShdVo> list2 = new ArrayList<>();
ShdVo shdVo = new ShdVo();
shdVo.setName("河北区");
shdVo.setFhsl(2900);
shdVo.setSysl(262);
shdVo.setKcsl(2638);
shdVo.setBzzhbdw("支");
shdVo.setDq("120105");
list2.add(shdVo);
ShdVo shdVo2 = new ShdVo();
shdVo2.setName("河北区");
shdVo2.setFhsl(2900);
shdVo2.setSysl(262);
shdVo2.setKcsl(2638);
shdVo2.setBzzhbdw("支");
shdVo2.setDq("120105");
list2.add(shdVo2);
ShdVo shdVo3 = new ShdVo();
shdVo3.setName("河东区");
shdVo3.setFhsl(900);
shdVo3.setSysl(262);
shdVo3.setKcsl(638);
shdVo3.setBzzhbdw("箱");
shdVo3.setDq("120105");
list2.add(shdVo3);
ShdVo shdVo4 = new ShdVo();
shdVo4.setName("河北区");
shdVo4.setFhsl(800);
shdVo4.setSysl(62);
shdVo4.setKcsl(738);
shdVo4.setBzzhbdw("箱");
shdVo4.setDq("120105");
list2.add(shdVo4);
ShdVo shdVo5 = new ShdVo();
shdVo5.setName("河北区");
shdVo5.setFhsl(100);
shdVo5.setSysl(100);
shdVo5.setKcsl(100);
shdVo5.setBzzhbdw("盒");
shdVo5.setDq("120105");
list2.add(shdVo5);
List<String> strings = new ArrayList<>(list2.size());
for (int i=0;i<list2.size();i++){
if (!strings.contains(list2.get(i).getBzzhbdw())){
strings.add(list2.get(i).getBzzhbdw());
}
}
Map<String,String> map =new HashMap<>();
for (int i=0;i<strings.size();i++){
int finalI = i;
map.put(strings.get(finalI),"涉及" + String.valueOf(list2.stream().filter(a ->strings.get(finalI).equals(a.getBzzhbdw())).mapToInt(ShdVo::getFhsl).sum()) + strings.get(finalI));
map.put(strings.get(finalI) + String.valueOf(i),"已使用" + String.valueOf(list2.stream().filter(a ->strings.get(finalI).equals(a.getBzzhbdw())).mapToInt(ShdVo::getSysl).sum()) + strings.get(finalI));
}**
首先把返回值的数字和转换比分开来,这样就可以得到’箱’、‘盒’、'瓶’之类的包装单位,去重得到所有的包装单位放到一个list集合里面,但是因为需要根据不同的包装单位去求和,所以把包装单位当成键,总数作为值,下面是用postman得到的返回值