Java 8 打破递归循环

标签 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,它在执行 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/

相关文章:

java - MyBatis 可以创建数据库模式吗?

java - 如何将包含另一个数组列表的 Arraylist<class Type> 中的数据循环到带有 JComboBox 的 JTable 中?

java - 将 Swing 应用程序迁移到 Java 8 会导致 java.lang.ClassNotFoundException : org. jdesktop.swingworker.SwingWorker

foreach - 对流的操作产生结果,但不修改其底层数据源

java - PHP变量到Java小程序?

java - 骰子模拟寻找正确的点

java - Java 7 和 8 中方法的最大大小

Java流排序2个变量升序/降序

java - 使用 java 8 方法引用的 Null Check 方法可能吗?

java - Solr 导入命令不起作用