利用STREAM API对LIST集合进行分组求和统计
文章目录
一、原始数据及需求
需求:发货地和收货地相同的数据,合并这两项,并计算其他两项的数据之和
拿到的原始数据如下图所示:
二、利用STREAM API处理LIST集合
代码如下:
@Override
public Map<String, Object> countCarLine(String begin, String end) {
// 线路统计
List<CarLineVO> carLineVOS = dashboardMapper.countCarLine(begin, end);
// 接收处理后的数据
List<CarLineVO> newCarLineVOs = new ArrayList<>();
// 数据分组统计处理
carLineVOS.parallelStream()
.collect(Collectors.groupingBy(item -> (item .getDeliverAddress() + item .getCollectAddress()), Collectors.toList()))
.forEach((id, transfer) -> {
transfer.stream()
.reduce((a, b) -> new CarLineVO(a.getDeliverAddress(), a.getCollectAddress(), a.getCollectNetWeight().add(b.getCollectNetWeight()), a.getTotalFreightPrice().add(b.getTotalFreightPrice())))
.ifPresent(newCarLineVOs::add);
});
Map<String, Object> map = new HashMap<>();
map.put("carLine", newCarLineVOs);
return map;
}
三、处理后得到符合需求的数据
处理后的数据:
四、实体类
CarLineVO类:
/**
* @Author: Ron
* @Create: 2020 10:14
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class CarLineVO {
private String deliverAddress;
private String collectAddress;
private BigDecimal collectNetWeight;
private BigDecimal totalFreightPrice;
}
实体类使用lombok插件
总结
新建一个List集合存放CarLineVO对象,并用lambda表达式进行处理,其中parallelStream是一个并行执行的流.它通过默认的ForkJoinPool,提高多线程任务的速度。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
2020-08-17 mybatis异常:Could not find result map ......... 问题分析及解决