1,将list通过某个字段转为map
2,计算相同key中对象中数量的和
public static void main(String[] args) {
ArrayList<TypeSourceVo> personList = new ArrayList<>();
TypeSourceVo vo1 = new TypeSourceVo();
TypeSourceVo vo2 = new TypeSourceVo();
TypeSourceVo vo3 = new TypeSourceVo();
vo1.setType("qd");
vo2.setType("qd");
vo3.setType("qhiuiuew");
vo1.setNum(32);
vo3.setNum(25);
vo2.setNum(62);
personList.add(vo1);
personList.add(vo2);
personList.add(vo3);
// 求集合中对象的年龄的总和
Optional<Integer> reduce3 = personList.stream().map(p -> p.getNum()).reduce(Integer::sum);
System.out.println(reduce3); //Optional[50]
//记录另一种方式
//Map> map = vos.stream().collect(
// Collectors.groupingBy(
// DisposalVo::getStreetName, Collectors.mapping(
// DisposalVo::getStatus, Collectors.toList())));
Map<String, List<TypeSourceVo>> collect = personList.stream().collect(Collectors.groupingBy(TypeSourceVo::getType));
for (Map.Entry<String, List<TypeSourceVo>> entry : collect.entrySet()) {
System.out.println(entry.getKey() + "------" + entry.getValue());
String key = entry.getKey();
Optional<Integer> reduce = entry.getValue().stream().map(vo -> vo.getNum()).reduce(Integer::sum);
System.out.println("type为:"+key+",数量为:"+reduce);
}
}
@Data
@ApiModel("类别来源TypeSourceVo")
public class TypeSourceVo implements Serializable {
@ApiModelProperty("类别")
private String type;
@ApiModelProperty("数量")
private Integer num;
}