Ram*_*m R 11 java foreach java-8 java-stream
我写了一个返回布尔值的简单方法.
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;
}
Run Code Online (Sandbox Code Playgroud)
该方法抛出以下异常.
error: incompatible types: unexpected return value
studentConfigs.forEach(studentConfig ->
Run Code Online (Sandbox Code Playgroud)
我的代码有什么问题?
Era*_*ran 10
传递给的lambda表达式forEach
不应该有返回值.
true
如果输入的任何元素Collection
满足条件,您似乎想要返回:
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;
}
Run Code Online (Sandbox Code Playgroud)
正如霍尔格所说,这可以简化为一个声明:
return studentConfigs != null && studentConfigs.stream().anyMatch(sc -> sc.action() == null || !sc.action().equals(Action.DELETE));
Run Code Online (Sandbox Code Playgroud)
要么
return studentConfigs != null ? studentConfigs.stream().anyMatch(sc -> sc.action() == null || !sc.action().equals(Action.DELETE)) : false;
Run Code Online (Sandbox Code Playgroud)
我不建议您在这里使用 Stream API。看看这个foreach
版本是多么清晰和简单:
private boolean isActionAvailable(Collection<StudentConfiguration> studentConfigurations) {\n if(studentConfigurations == null) {\n return false;\n }\n\n for (StudentConfiguration configuration : studentConfigurations) {\n if (!Action.DELETE.equals(configuration.action())) {\n return true;\n }\n }\n\n return false;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n否则,如果你是一个狂热的人,
\n\nprivate boolean isActionAvailable(Collection<StudentConfiguration> configs) {\n return configs != null &&\n configs.stream()\n .map(StudentConfiguration::action)\n .anyMatch(Predicate.isEqual\xe2\x80\x8b(Action.DELETE).negate()));\n}\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
1505 次 |
最近记录: |