如何将普通 Java for 循环转换为 Java 8 流?
How to convert a plain Java for-loop to a Java 8 stream?
如何将此代码转换为 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("");
如果获得 first 匹配值并不重要,并且您可以只获得 any 匹配,则替换 findFirst()
和 findAny()
。它会更清楚地标记您的意图,如果有人稍后使流并行,findAny()
可能会表现更好。
如何将此代码转换为 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("");
如果获得 first 匹配值并不重要,并且您可以只获得 any 匹配,则替换 findFirst()
和 findAny()
。它会更清楚地标记您的意图,如果有人稍后使流并行,findAny()
可能会表现更好。