我有以下阵列中间抛出异常的Java 8流 - 在一个迭代
ArrayList<Car> list = new ArrayList.
我要重复它,并抛出一个异常,如果含有一定值
即
如果至少一个
list.stream.filter(x-x.color.equals("Black"))
然后我想停止迭代并抛出一个EXCE ption。
有没有办法?
我有以下阵列中间抛出异常的Java 8流 - 在一个迭代
ArrayList<Car> list = new ArrayList.
我要重复它,并抛出一个异常,如果含有一定值
即
如果至少一个
list.stream.filter(x-x.color.equals("Black"))
然后我想停止迭代并抛出一个EXCE ption。
有没有办法?
最简单的就是:
list.forEach(x -> {
if(x.color.equals("Black")) throw new RuntimeException();
});
您可以使用anyMatch
此:
boolean matched = list.stream().anyMatch(x -> x.color.equals("Black"));
if(matched) throw new SomeException();
因为如果满足条件是一个元素通过它进行遍历时,它不评估管道的其余部分,并且它返回假,如果流是空了,我想这就是你要找的。
当然,你可以做一个单一的语句,但视情况而定,可能不会提高可读性:
if(list.stream().anyMatch(x -> x.color.equals("Black"))) {
throw new SomeException();
}
不像'forEach'方法,这将允许你抛出一个检查异常。 – Misha
如果你使用这种方法,那么就不需要调用'stream()'。 'list.forEach'就足够了。 –
你当然是对的,我被OP的代码示例所蒙蔽了 – Chirlo
stream.foreach和foreach有什么区别? – Jeb