#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
, реализация).