在下面的示例中,someObjects是一个集合。如果条件在循环内匹配,我试图返回true,但是这似乎没有编译。但是,当我只是添加"返回"它运作正常。我需要解决的问题是什么?
public boolean find(){
someObjects.forEach(obj -> {
if (some_condition_met) {
return true;
}
});
return false;
}
编译错误
类型中的每个(消费者)方法 Iterable不适用于参数(( obj) - > {})
答案 0 :(得分:9)
我想你想这样做:
public boolean find(){
return someObjects.stream().anyMatch(o -> your_condition);
}
答案 1 :(得分:6)
forEach
中的Collection
方法需要Consumer
,这意味着一个函数会获取值,但不会返回任何内容。这就是为什么你不能使用return true;
但return;
工作正常的原因。
我想在条件满足时突破循环,最好使用简单的for(...)
循环。我假设obj
的类型是Object
:
for (Object obj : someObjects) {
if (some_condition_met) {
return true;
}
}
return false;
答案 2 :(得分:3)
forEach
接受Consumer
因此您无法传递不返回 void 的行为。你需要做类似的事情:
return someObjects.stream().anyMatch(e -> condition);