我写了一个简单的方法来返回布尔值。
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 ->
我的代码有什么问题?
答案 0 :(得分:10)
传递给loading
的lambda表达式不应具有返回值。
如果输入forEach
的任何元素满足条件,您似乎想返回true
:
Collection
如Holger所建议,这可以简化为一个语句:
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;
}
或
return studentConfigs != null && studentConfigs.stream().anyMatch(sc -> sc.action() == null || !sc.action().equals(Action.DELETE));
答案 1 :(得分:4)
或者,在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));
}
答案 2 :(得分:4)
我不建议您在此处使用Stream API。看一下foreach
版本有多清晰:
private boolean isActionAvailable(Collection<StudentConfiguration> studentConfigurations) {
if(studentConfigurations == null) {
return false;
}
for (StudentConfiguration configuration : studentConfigurations) {
if (!Action.DELETE.equals(configuration.action())) {
return true;
}
}
return false;
}
否则,如果您是一个狂热的人,
private boolean isActionAvailable(Collection<StudentConfiguration> configs) {
return configs != null &&
configs.stream()
.map(StudentConfiguration::action)
.anyMatch(Predicate.isEqual(Action.DELETE).negate()));
}
答案 3 :(得分:1)
您的lambda中的antiPattern
语句将终止该lambda,而不是nextProps
方法。因此,现在推断出的lambda类型是错误的,因为shouldComponentUpdate
期望有return
。
有关如何解决该问题的其他答案。
答案 4 :(得分:1)
这是forEach()方法forEach(Consumer<? super T> action)
的签名。
它引用具有方法void accept(T t)
的Consumer接口。
在您的代码中,您将覆盖accept()
并返回无效的值,因为accept()
的返回类型为void。
因此它显示错误
error: incompatible types: unexpected return value
studentConfigs.forEach(studentConfig ->