需求:数据库查出一批集合,时间各不相同,但是现在要求对同一天的金额和总数再次叠加处理:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ResultDO {
private String times;
private Double price;
private Long count;
}
public class DataTest {
public static void main(String[] args) {
ResultDO do1 = new ResultDO();
ResultDO do2 = new ResultDO();
ResultDO do3 = new ResultDO();
ResultDO do4 = new ResultDO();
do1.setPrice(20.1);
do2.setPrice(21.1);
do3.setPrice(22.1);
do4.setPrice(26.1);
do1.setCount(2L);
do2.setCount(2L);
do3.setCount(3L);
do4.setCount(4L);
do1.setTimes("2021-04-06");
do2.setTimes("2021-04-06");
do3.setTimes("2021-04-07");
do4.setTimes("2021-04-08");
List<ResultDO> resultDOS = Arrays.asList(do1,do2,do3,do4);
List<ResultDO> resultDOList = new ArrayList<>();
resultDOS.parallelStream().collect(Collectors.groupingBy(o->(o.getTimes()),Collectors.toList()))
.forEach((id,trans)->{
trans.stream().reduce((a,b)->new ResultDO(a.getTimes(),a.getPrice()+b.getPrice(),a.getCount()+b.getCount())).ifPresent(resultDOList::add);
});
System.out.println(resultDOList);
}
}
[ResultDO(times=2021-04-06, price=41.2, count=4), ResultDO(times=2021-04-08, price=26.1, count=4), ResultDO(times=2021-04-07, price=22.1, count=3)]