【问题标题】:Refactoring nested for loop into Java 8 stream将嵌套的 for 循环重构为 Java 8 流
【发布时间】:2016-01-04 11:20:14
【问题描述】:

我有以下 for 循环:

    List<Map> mapList = new ArrayList<>();
    for (Resource resource : getResources()) {
        for (Method method : resource.getMethods()) {
            mapList.add(getMap(resource,method));
        }
    }
    return mapList;

如何将此嵌套循环重构为 Java 8 流?

【问题讨论】:

  • 您问了一个类似的问题“将嵌套的 foreach 重构为 Java 8 流”stackoverflow.com/questions/34406744/…。你没有从中学到什么吗?
  • 不,我仍在努力解决这个问题
  • 那你好像尝试了一些东西,我建议你发布你的尝试。有时它可以帮助回答的人解释为什么你的方法不起作用。

标签: java java-8 java-stream


【解决方案1】:

您可以使用flatMap 获取所有Methods 的所有Maps 的所有Resources :

List<Map> mapList = 
    getResources().stream()
                  .flatMap(r->r.getMethods().stream().map(m->getMap(r,m)))
                  .collect(Collectors.toList());

【讨论】:

  • 对我来说,与带有循环的版本相比,带有流的版本看起来更不可读(在这种特殊情况下)
  • @WandMaker 在这种情况下,你绝对应该坚持使用循环。
猜你喜欢
  • 1970-01-01
  • 2020-08-09
  • 1970-01-01
  • 1970-01-01
  • 2016-05-14
  • 2019-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多