我有以下类,它是一个嵌套对象,
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,它在执行 break 之后执行 else block ,而不是从 for 循环中出来并返回顺序。
还有其他方法可以实现吗?最好是 Java 8。
最佳答案
您正试图将返回值作为参数传递,这在这种情况下不起作用。相反,我建议您返回找到的订单并检查该结果。
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;
}
关于Java 8 打破递归循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49785573/