Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用流api重写下面的循环是可能的,还是我的尝试是徒劳的?_Java_Java Stream - Fatal编程技术网

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())));