前提
原始数据
字段1 | 字段2 | 字段3 | 字段4 |
---|
A | B | C | D |
A | B | C | D |
B | B | C | D |
B | B | C | D |
操作得到的数据
根据字段1分组之后得到数量。如:A的数量为2,B的数量也是2.返回前端数值。
Map<Integer, Map<Integer, Long>> map = vResNeLists.stream()
.collect(Collectors.groupingBy(VResNeList::getTypeId, Collectors.groupingBy(VResNeList::getTypeId, Collectors.counting())));
List<NeReportVO> newVResNeLists=new ArrayList();
vResNeLists.stream().forEach(vResNeList->{
NeReportVO neReportVO = new NeReportVO();
map.forEach((k, v) -> {
if (k == vResNeList.getTypeId()) {
neReportVO.setTotal(Math.toIntExact(v.get(k)));
}
neReportVO.setName(vResNeList.getName());
neReportVO.setNeModel(vResNeList.getTypeName());
neReportVO.setNeType(vResNeList.getTypeCategoryName());
});
newVResNeLists.add(neReportVO);
});
ArrayList<NeReportVO> collect = newVResNeLists.stream().collect(
Collectors.collectingAndThen(Collectors.toCollection(() ->
new TreeSet<>(Comparator.comparing(NeReportVO::getNeModel))), ArrayList::new));
return collect;
List<VResNeList> vResNeListList = vResNeLists.stream().collect(
Collectors.collectingAndThen(Collectors.toCollection(() ->
new TreeSet<>(Comparator.comparing(VResNeList::getTypeId))), ArrayList::new));
for (VResNeList vResNeList : vResNeListList) {
List<VResNeList> corpList = vResNeLists.stream().filter(item ->
item.getTypeId().equals(vResNeList.getTypeId())
).collect(Collectors.toList());
List<VResNeList> typeLists = corpList.stream().collect(
Collectors.collectingAndThen(Collectors.toCollection(() ->
new TreeSet<>(Comparator.comparing(VResNeList::getTypeId))), ArrayList::new));
for (VResNeList neList : typeLists) {
List<VResNeList> typeList = corpList.stream().filter(item ->
item.getTypeId().equals(neList.getTypeId())).collect(Collectors.toList());
NeReportVO neReportVO = new NeReportVO();
neReportVO.setName(vResNeList.getName());
neReportVO.setNeModel(neList.getTypeName());
neReportVO.setNeType(neList.getTypeCategoryName());
neReportVO.setTotal(typeList.size());
neReportVOS.add(neReportVO);
}
}
return neReportVOS;