我有以下类,它是一个嵌套对象,
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。
答案 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;
}