错误:不兼容类型:意外返回值:Java 8

2022-09-03 13:02:24

我写了一个返回布尔值的简单方法。

private boolean isActionAvailable(Collection<StudentConfiguration> studentConfigs){
       if(studentConfigs != null)
        {
            studentConfigs.forEach(studentConfig -> {
                if(studentConfig.action() == null || !studentConfig.action().equals(Action.DELETE)) {
                    return true;
                }
            });
        }
        return false;
    }

该方法将引发以下异常。

error: incompatible types: unexpected return value
            studentConfigs.forEach(studentConfig -> 

我的代码有什么问题?


答案 1

传递给的 lambda 表达式不应具有返回值。forEach

看起来,如果输入的任何元素满足条件,则要返回:trueCollection

private boolean isActionAvailable(Collection<StudentConfiguration> studentConfigs){
    if(studentConfigs != null) {
        if (studentConfigs.stream().anyMatch(sc -> sc.action() == null || !sc.action().equals(Action.DELETE))) {
            return true;
        }
    }
    return false;
}

正如Holger所建议的那样,这可以简化为一个语句:

return studentConfigs != null && studentConfigs.stream().anyMatch(sc -> sc.action() == null || !sc.action().equals(Action.DELETE));

return studentConfigs != null ? studentConfigs.stream().anyMatch(sc -> sc.action() == null || !sc.action().equals(Action.DELETE)) : false;

答案 2

或者,对于Java9及更高版本,您可以使用Stream.ofNullable并更新为:

private boolean isActionAvailable(Collection<StudentConfiguration> studentConfigs) {
    return Stream.ofNullable(studentConfigs)
            .flatMap(Collection::stream)
            .anyMatch(studentConfig -> studentConfig.action() == null || !studentConfig.action().equals(Action.DELETE));
}