【问题标题】:How to transform a "nested for each" to Java 8 Lambda/Stream construct?如何将“每个嵌套”转换为 Java 8 Lambda/Stream 构造?
【发布时间】:2014-08-09 17:17:03
【问题描述】:

你如何转换下面的代码块:

List<ExecutableElement> methods = ...
List<ExecutableElement> hiddens = new ArrayList<>();
for (ExecutableElement hider : methods) {
  for (ExecutableElement hidden : methods) {
    if (elements.hides(hider, hidden) || elements.overrides(hider, hidden, type)) {
      hiddens.add(hidden);
    }
  }
}
methods.removeAll(hiddens);

变成这样的:

methods.removeAll(methods.stream().filter(... ...().collect(Collectors.toList());

【问题讨论】:

标签: java lambda collections java-8 java-stream


【解决方案1】:

flatMap 应该可以解决问题:

对于每个 ExecutableElement,遍历所有 ExecutableElement 并找到所有被它隐藏的元素,然后将所有这些流通过 flatMap 折叠为单个流,将其收集到列表中,并删除所有隐藏的元素。

methods.removeAll(
    methods.stream ()
           .flatMap (hider -> methods.stream()
                                     .filter (hidden -> elements.hides(hider, hidden) || 
                                                        elements.overrides(hider, hidden, type))
                    )
           .collect(Collectors.toList())
);

【讨论】:

    猜你喜欢
    • 2019-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-16
    • 2018-05-03
    • 2016-07-28
    相关资源
    最近更新 更多