Использование лямбда-выражения для вложенных циклов for в java

#java #java-8

Вопрос:

Я изучаю лямбда-выражения на java. У меня есть код, который использует циклы » для » примерно так, как показано ниже:

 for (RoutingCode routingCode: referencesDao.getRoutingCodes()) {
  ReferencesUtil.routingCodeToXml(references.addElement("referenceType"), routingCode);

  for (AutoCreateIssue ac: referencesDao.getAutoCreateIssues(routingCode.getId())) {
    ReferencesUtil.autoCreateIssueToXml(references.addElement("referenceType"), ac);
  }
}
 

Я хочу написать лямбда — выражение для вышеперечисленного. Я могу написать лямбда-выражение, если есть только один цикл for, но не могу этого сделать, когда есть вложенные циклы for. Любая помощь будет признательна.

Это то, что я попробовал с помощью одного цикла:

 referencesDao.getRoutingCodes().stream().forEach(routingCode -> ReferencesUtil.routingCodeToXml(references.addElement("referenceType"), routingCode));
 

Комментарии:

1. @GhostCat Спасибо за ответ. Я просто изо всех сил пытаюсь перейти routingCode.getId() от первого цикла ко второму.

Ответ №1:

Поскольку referencesDao.getRoutingCodes() , похоже, возвращает список, вы должны иметь возможность использовать forEach его напрямую без потоковой передачи. Похоже, что это то, чего вы пытаетесь достичь.

 referencesDao.getRoutingCodes()
    .forEach(routingCode -> {
        references.addElement("referenceType", routingCode);
        referencesDao
            .getAutCreatedIssues(routingCode.getId())
            .forEach(ac -> ReferenceUtil
                            .autoCreateIssueToXml(
                                references.addElement(
                                            "referenceType",
                                            ac
                                )
                            )
            );
    });
 

Это просто для того, чтобы дать представление. Это может потребовать некоторой корректировки, так как я легко мог неправильно истолковать некоторые поля и методы.

Например:

 for (AutoCreateIssue ac: referencesDao.getAutoCreateIssues(routingCode.getId()))
 

Если getAutoCreateIssues возвращает a collection , то можно использовать встроенный метод forEach . Но если возвращает массив и использует неявный итератор, то массив должен быть передан потоком. В моем примере предполагалось, что это коллекция (возможно List , реализация).