Java 使用流api重写下面的循环是可能的,还是我的尝试是徒劳的?
主要目标:Java 使用流api重写下面的循环是可能的,还是我的尝试是徒劳的?,java,java-stream,Java,Java Stream,主要目标: public class Order { private Long orderId; ... private List<OrderAudit> auditList; } 所有命令 List<Order> orderList = orderDao.getOrderList(request); List orderList=orderDao.getOrderList(请求); 所有项目 List<OrderAudit> a
public class Order {
private Long orderId;
...
private List<OrderAudit> auditList;
}
所有命令
List<Order> orderList = orderDao.getOrderList(request);
List orderList=orderDao.getOrderList(请求);
所有项目
List<OrderAudit> allAudits = orderDao.getAllAudits();
List allAudits=orderDao.getAllAudits();
在那里,我尝试查找每个订单的所有审核,并将此列表设置为order。周期:
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);
}
for(订单:订单列表){
Long orderId=order.getOrderId();
List orderAuditList=allAudits.stream()
.filter(x->x.getOrderId().equals(orderId))
.collect(Collectors.toList());
order.setAuditList(orderAuditList);
}
您可以使用groupingBy
创建列表的映射
Map<Long, List<OrderAudit>> orderAuditMap = allAudits.stream()
.collect(Collectors.groupingBy(OrderAudit::getOrderId));
然后从映射中通过orderId
获取List
,并使用forEach()按顺序设置
要完成解决方案并创建一个列表
,其中每个订单都包含id
和相应的审核
,您可以在分组后流式处理入口集
,并映射到订单
对象。当然,如果那些…
在问题中没有特殊意义。另一方面,将peek
用于调试目的以外的操作并不可靠。在这些操作之后,两个列表中对象的原始顺序都会保留下来?对于第一部分,否,但您可以使用LinkedHashMap::new
和第二部分Yes,我更新了OrderAudit
保留顺序的答案说错了。我不想获取组的顺序,而是要获取组中的OrderAdit
s列表。可能吗?如果无法完成此操作,则必须退出循环。谢谢你的回答!
Map<Long, List<OrderAudit>> orderAuditMap = allAudits.stream()
.collect(Collectors.groupingBy(OrderAudit::getOrderId));
Map<Long, List<OrderAudit>> orderAuditMap = allAudits.stream()
.collect(Collectors.groupingBy(i -> i.getOrderId(), LinkedHashMap::new, Collectors.toList()));
orderList.stream().forEach(e -> e.setAuditList(orderAuditMap.get(e.getOrderId())));