2015-05-04 49 views
2

我有以下阵列中间抛出异常的Java 8流 - 在一个迭代

ArrayList<Car> list = new ArrayList. 

我要重复它,并抛出一个异常,如果含有一定值

如果至少一个

list.stream.filter(x-x.color.equals("Black")) 

然后我想停止迭代并抛出一个EXCE ption。
有没有办法?

回答

6

最简单的就是:

list.forEach(x -> { 
    if(x.color.equals("Black")) throw new RuntimeException(); 
}); 
+2

如果你使用这种方法,那么就不需要调用'stream()'。 'list.forEach'就足够了。 –

+0

你当然是对的,我被OP的代码示例所蒙蔽了 – Chirlo

+0

stream.foreach和foreach有什么区别? – Jeb

8

您可以使用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(); 
} 
+5

不像'forEach'方法,这将允许你抛出一个检查异常。 – Misha