如何转换以下代码块:
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());
最佳答案
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())
);
关于java - 如何将 "nested for each"转换为 Java 8 Lambda/Stream 构造?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25221114/