如何将Java双层迭代方法改写为更简洁的Java 8函数式风格实现?
有更简洁的实现版本,且逻辑和原有迭代实现的短路遍历规则完全一致:
import java.util.Objects; public static String fooFunctional(List<String> arguments, List<String> conditions) { return conditions.stream() .map(condition -> arguments.stream().filter(arg -> arg.contains(condition)).findFirst().orElse(null)) .filter(Objects::nonNull) .findFirst() .orElse(""); }
逻辑说明
- 按
conditions的顺序逐个遍历每个匹配条件 - 对每个条件,遍历
arguments找第一个包含该条件的参数,找不到就返回null - 过滤掉所有
null结果,取第一个非空的匹配参数返回 - 所有条件都匹配不到时返回空字符串,和原生迭代逻辑完全对齐
如果你不想额外导入Objects类,也可以用下面的等价版本,写法同样比你最初的实现更简短:
public static String fooFunctional(List<String> arguments, List<String> conditions) { return conditions.stream() .flatMap(condition -> arguments.stream().filter(arg -> arg.contains(condition)).limit(1)) .findFirst() .orElse(""); }
这个版本用limit(1)替代了你原来的findFirst加Stream::of的转换逻辑,更直观易懂。
内容的提问来源于stack exchange,提问作者kokodyn
相关产品推荐
相关产品推荐

