Java 8打破了递归循环

时间:2018-04-11 22:59:53

标签: java java-8

我有以下类,它是一个嵌套对象,

public class Order implements Serializable {

    private String id;
    private List<Order> orders = new ArrayList<>();

    // getters and setters   
}

当我有完整的列表和订单ID时,尝试找到匹配的订单,

private Order findMatchingOrder(String id, List <Order> orders, Order order) {
 for (Order o: orders) {
  if (o.getId().equals(id)) {
   order = o;
   break;
  } else {
   findMatchingOrder(id, o.getOrders(), o);
  }
 }
 return order;
}

因为它是一个递归调用,即使我在if条件中有中断,它也会在执行break之后执行else块而不是退出for循环并返回顺序。

有没有其他方法可以实现这一目标?最好是Java 8。

1 个答案:

答案 0 :(得分:4)

您试图将返回值作为参数传递,在这种情况下不起作用。相反,我建议您返回找到的订单并检查该结果。

private Order findMatchingOrder(String id, List<Order> orders) {
    for (Order o: orders) {
        if (o.getId().equals(id)) 
            return o;

        Order found = findMatchingOrder(id, o.getOrders());
        if (found != null)
            return found;
    }
    return null;
}