前提
原始数据
| 字段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.返回前端数值。
// 其中vResNeLists类似与原始数据
//方法一;
// 根据网元类型id分组和统计行数
Map> map = vResNeLists.stream()
.collect(Collectors.groupingBy(VResNeList::getTypeId, Collectors.groupingBy(VResNeList::getTypeId, Collectors.counting())));
// 存放新的集合里面存在总数量
List 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);
});
//按照网元类型id进行去重操作
ArrayList collect = newVResNeLists.stream().collect(
Collectors.collectingAndThen(Collectors.toCollection(() ->
new TreeSet<>(Comparator.comparing(NeReportVO::getNeModel))), ArrayList::new));
return collect;
//方法二;
//按照网元类型去重
List vResNeListList = vResNeLists.stream().collect(
Collectors.collectingAndThen(Collectors.toCollection(() ->
new TreeSet<>(Comparator.comparing(VResNeList::getTypeId))), ArrayList::new));
for (VResNeList vResNeList : vResNeListList) {
//获取网元类型对应的网元集合数据
List corpList = vResNeLists.stream().filter(item ->
item.getTypeId().equals(vResNeList.getTypeId())
).collect(Collectors.toList());
//按照型号去重
List typeLists = corpList.stream().collect(
Collectors.collectingAndThen(Collectors.toCollection(() ->
new TreeSet<>(Comparator.comparing(VResNeList::getTypeId))), ArrayList::new));
for (VResNeList neList : typeLists) {
//获取对应厂家对应型号的数据总集合
List 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;