首页 > 解决方案 > 在java中使用lambda表达式进行嵌套for循环

问题描述

我正在学习java中的lambda表达式。我有使用“for”循环的代码,如下所示:

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

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

我想为上面写一个 lambda 表达式。如果只有一个 for 循环,我可以编写 lambda 表达式,但如果有嵌套的 for 循环,我就不能这样做。任何帮助表示赞赏。

这是我用一个循环尝试过的:

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

标签: javajava-8

解决方案


由于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实现)。


推荐阅读