2015-05-04 41 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