java - 可以使用流 api 重写以下循环,还是我徒劳无功?
问题描述
主要对象:
public class Order {
private Long orderId;
...
private List<OrderAudit> auditList;
}
Order的Item对象
public class OrderAudit {
private Long orderId;
...
}
所有订单
List<Order> orderList = orderDao.getOrderList(request);
所有项目
List<OrderAudit> allAudits = orderDao.getAllAudits();
在那里我尝试查找每个订单的所有审核并将此列表设置为订单。循环:
for (Order order : orderList) {
Long orderId = order.getOrderId();
List<OrderAudit> orderAuditList = allAudits.stream()
.filter(x-> x.getOrderId().equals(orderId))
.collect(Collectors.toList());
order.setAuditList(orderAuditList);
}
解决方案
您可以使用以下方式groupingBy
创建地图List<OrderAudit>
orderId
Map<Long, List<OrderAudit>> orderAuditMap = allAudits.stream()
.collect(Collectors.groupingBy(OrderAudit::getOrderId));
如果你想保持顺序OrderAudit
Map<Long, List<OrderAudit>> orderAuditMap = allAudits.stream()
.collect(Collectors.groupingBy(i -> i.getOrderId(), LinkedHashMap::new, Collectors.toList()));
然后从地图List<OrderAudit>
中获取orderId
并按顺序使用forEach()
orderList.stream().forEach(e -> e.setAuditList(orderAuditMap.get(e.getOrderId())));
推荐阅读
- jquery - checkmarx 客户端潜在的 XSS 修复
- swift - 如何将 JSON 数据保存到我的本地主机中?http post响应说“200”
- python - 在 Python 数据类中使用描述符作为字段的正确方法是什么?
- amazon-web-services - 如何在 Terraform 中使用 AWS Backup 在不同区域创建文件库?
- symfony - 作曲家安装/更新触发器类 Doctrine\Common\Cache\ArrayCache 不存在
- angular - 将`Encrypted`文件上传到Azure容器并在另一端`Decrypt` - 使用Angular
- javascript - 删除重复行、工作表和谷歌脚本的功能
- blazor - Childcomponent 到另一个 ChildComponent 的 EventCallback,:Blazor
- php - 如何从 JSON 中检索值
- javascript - 滚动时倾斜文本,如何定位类而不是部分