如何使用Java Stream API减少以下语句?
String code = "searchcode";
Inner result;
for (Outer outer : outerList) {
for (Middle middle : outer.getMiddleList()) {
Inner inner = middle.getResultForCode(code);
if (inner != null) {
result = inner;
}
}
}
我想得到"内心"或" inner.getRelevantThing()"
类似的东西:
Optional<Inner> result = outerList.forEach(middle ->
middle.stream()
.filter(middle.getResultForCode(code))
.findFirst());
答案 0 :(得分:3)
您可以使用flatMap
展平嵌套流。
Optional<Inner> result = outerList.stream()
.flatMap(outer -> outer.getMiddleList().stream())
.map(middle -> middle.getResultForCode(code))
.filter(Objects::nonNull)
.findAny();
(请注意findAny
会找到任何匹配的项目,而不是代码所做的最后一个匹配项目。)
如果您想要&#34;相关内容&#34;,您可以将映射应用于Optional<Inner>
。
outerList.stream()
.flatMap(outer -> outer.getMiddleList().stream())
.map(middle -> middle.getResultForCode(code))
.filter(Objects::nonNull)
.findAny()
.map(Inner::getRelevantThing);