我有以下陣列中間拋出異常的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