1、业务场景需求:按id进行分组,获取名称字段的list集合。
如果是mysql数据库,使用groupBy+GroupConcat可以很方便处理,但是数据库是sql server,故采用Stream流处理方式。
Map<String, List<EnPlanYearVo>> groupByMap = list.stream().collect(Collectors.groupingBy(EnPlanYearVo::getVariableId));
for (Map.Entry<String, List<EnPlanYearVo>> entry : groupByMap.entrySet()) {
//entry.getValue是分组后的list
System.out.println("分组对应的key:" + entry.getKey() + ";对应的value:" + entry.getValue() + ";");
//获取分组之后的名称字段list集合
List<String> monthList = entry.getValue().stream()
.map(EnPlanYearVo::getMonthName)
.collect(Collectors.toList());
}
2、根据某个字段获取去重后的实体list
List effectList = patientServerVOList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(()->new TreeSet<>(Comparator.comparing(PatientServerVO::getPatId))),ArrayList::new));
3、list按某个字段求和
long materialCount = energyCarList.stream().filter(e ->e.getClassCode().equals(carVo.getClassCode())).count();
4、list按某个字段且有筛选条件后求和
long materialSixCount = energyCarList.stream().filter(e ->e.getClassCode().equals(carVo.getClassCode())).filter(e ->"国六".equals(e.getEmissionStage())).count();```