如何将此代码转换为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()的性能可能会更好。

10-08 08:28