尝试使用流过滤集合,并尝试将以下lambda传递给filter()一个Set,它在标题中给出了一个神秘的错误:
unmatchedIncomingFields.stream().filter(s-> s.matches(fieldMatchPattern))
Run Code Online (Sandbox Code Playgroud)
同时,创建Predicate对象有效:
unmatchedIncomingFields.stream().filter(new Predicate<String>() {
@Override
public boolean test(String s) {
return s.matches(fieldMatchPattern);
}
});
Run Code Online (Sandbox Code Playgroud)
根据JLS,如果每个控制路径返回一个值,则lambda主体是"值兼容的".matches()总是被调用并且总是返回一个布尔值,所以我不明白问题是什么.
我也尝试了相同lambda的各种变体 - 有和没有括号和参数类型,并使用表达式和块返回体.
这个问题看起来是不正确的,或者至少有些误导,IntelliJ中的错误突出显示,令实际错误的位置混淆.
过滤器发生在另一个lambda中,用于map()操作,我还没有指定返回,并且由于某种原因,IntelliJ突出显示过滤器的内部lambda,使其看起来像是带有错误的那个.