Java8中断递归循环
我有一个嵌套对象类Java8中断递归循环,java,java-8,Java,Java 8,我有一个嵌套对象类 public class Order implements Serializable { private String id; private List<Order> orders = new ArrayList<>(); // getters and setters } 公共类顺序实现可序列化{ 私有字符串id; 私有列表顺序=新的ArrayList(); //接球手和接球手 } 当我有完整的列表和订单id时,尝
public class Order implements Serializable {
private String id;
private List<Order> orders = new ArrayList<>();
// getters and setters
}
公共类顺序实现可序列化{
私有字符串id;
私有列表顺序=新的ArrayList();
//接球手和接球手
}
当我有完整的列表和订单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;
}
私人订单findMatchingOrder(字符串id、列表订单、订单订单){
对于(订单o:订单){
如果(o.getId().equals(id)){
顺序=o;
打破
}否则{
findMatchingOrder(id,o.getOrders(),o);
}
}
退货单;
}
因为这是一个递归调用,即使在if条件中有一个break,它也会在执行break之后执行else块,而不是退出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;
}
私人订单findMatchingOrder(字符串id,列表订单){
对于(订单o:订单){
如果(o.getId().equals(id))
返回o;
Order found=findMatchingOrder(id,o.getOrders());
如果(找到!=null)
发现退货;
}
返回null;
}
“是否有其他方法实现此目的?”-是:检查返回的内容。如果递归调用返回的不是null
,请通过返回返回给您的内容来打破循环(您需要重构当前算法以实现此方法)。尽管如此,我无法更改Order类,唯一可以更改的是此方法。我在想,既然它是嵌套的,那么这可以通过使用流来实现吗?谢谢,彼得。这看起来不错。让我试一试。您知道使用流在这里是否有意义,是否可行吗?@User0911 streams不能用于展平深层树,而这正是您所拥有的。@User0911使用流将递归解决方案转换为递归解决方案并不容易。您可以使用自定义拆分器来导航树,但这将更加复杂。