尝试使用流过滤集合,并尝试将以下 lambda 传递给 filter() 一个 Set,这会在标题中给出晦涩难懂的错误:
unmatchedIncomingFields.stream().filter(s-> s.matches(fieldMatchPattern))
同时,创建一个 Predicate 对象是有效的:
unmatchedIncomingFields.stream().filter(new Predicate<String>() {
@Override
public boolean test(String s) {
return s.matches(fieldMatchPattern);
}
});
根据 JLS,如果每个控制路径都返回一个值,则 lambda 主体是“值兼容的”。 matches() 总是被调用并且总是返回一个 bool 值,所以我不明白问题是什么。
我还尝试了相同 lambda- 的各种变体,带或不带括号和参数类型,以及使用表达式和带返回的 block 体。
最佳答案
这个问题看起来不正确,或者至少有些误导性,在 IntelliJ 中突出显示错误,混淆了实际错误的位置。
该过滤器出现在另一个用于 map() 操作的 lambda 中,而我尚未为其指定返回,并且出于某种原因,IntelliJ 突出显示了该过滤器的内部 lambda,使其看起来像是出现错误的那个 lambda .
关于lambda - Intellij 中的 Java Lambda : Expected not null but the lambda body is not value-compatible,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36834115/