【问题标题】:Converting Nested For Loops To Streams将嵌套的 For 循环转换为流
【发布时间】:2016-04-20 21:18:53
【问题描述】:

我在理解流时遇到了一些问题。我环顾四周,似乎找不到与我的用例匹配的示例。

我有一个现有的嵌套 for 循环:

List<ObjectB> objectBs = new ArrayList<ObjectB>();
for (ObjectA objA: objectAList) {
    for (ObjectB objB: objA.getObjectBList()) {
        if (objB.getNumber() != 2) {
            objectBs.add(objB);
        }
    }
}

大量示例展示了如何将 objB.getNumber() 添加到列表中,而不是 objB

【问题讨论】:

    标签: java java-8 java-stream


    【解决方案1】:

    您可以使用flatMap 获取所有ObjectB 实例的Stream&lt;ObjectB&gt; 并过滤所需数量的ObjectB

    List<ObjectB> objectBs = 
        objectAList.stream()
                   .flatMap (a -> a.getObjectBList().stream())
                   .filter (b -> b.getNumber() != 2)
                   .collect (Collectors.toList());
    

    【讨论】:

      猜你喜欢
      • 2021-06-06
      • 2020-11-26
      • 2012-11-06
      • 2019-11-22
      • 1970-01-01
      • 2017-08-08
      • 2021-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多