如何将此代码转换为Java 8流?
String getFirst(String key) {
for (Param p : params) {
if (key.equals(p.getKey())) {
if (!p.getValues().isEmpty()) {
return p.getValues().get(0);
}
}
}
return "";
}
最佳答案
return params.stream()
.filter(p -> key.equals(p.getKey())
.filter(p -> ! p.getValues().isEmpty())
.map(p -> p.getValues().get(0))
.findFirst()
.orElse("");
如果
p.getValues()
是List
,则可以将其缩短为:return params.stream()
.filter(p -> key.equals(p.getKey())
.flatMap(p -> p.getValues().stream())
.findFirst()
.orElse("");
如果获取第一个匹配值并不重要,并且可以任意匹配就可以了,请将
findFirst()
替换为findAny()
。它会更清楚地标记您的意图,并且,如果以后有人将流并行化,则findAny()
的性能可能会更好。