lambda - Intellij 中的 Java Lambda : Expected not null but the lambda body is not value-compatible

标签 lambda java-8

尝试使用流过滤集合,并尝试将以下 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/

相关文章:

c++ - 容器如何处理 lambda 表达式的参数

java - RxJava 中的指数退避

ruby - 将 lambda 应用于对象

c# - 在何处以不同方式调用函数之间有什么区别

java-8 - Java8 中 flatMap() 的用法

Java SE 8 Base64 类 : encoding of byte[] parameter

java.util.Optional 和 java.lang.Class - 奇怪的行为

幕后的Java 8方法引用

c++ - 如何将 lambda 函数与 std::replace_if() 一起使用?

Java Stream API——如何减少一个循环来减少