Java 8 Streams - 在迭代过程中抛出异常

3

I have the following array

ArrayList<Car> list = new ArrayList<>();

我希望能够迭代它并在其中包含特定值时抛出异常。
例如,如果至少有一个:
list.stream.filter(x -> x.color.equals("Black"));

我想停止迭代并抛出异常,有办法吗?

2个回答

9
您可以使用anyMatch方法来实现这个功能:
boolean matched = list.stream().anyMatch(x -> x.color.equals("Black"));
if(matched) throw new SomeException();

由于在迭代过程中仅当条件满足时才会继续处理管道的其余部分,并且当流为空时返回false,因此我认为这就是您要寻找的内容。

当然,您可以用单个语句来完成它,但这可能取决于情况而不会提高可读性:

if(list.stream().anyMatch(x -> x.color.equals("Black"))) {
    throw new SomeException();
}

6
forEach方法不同,这种方法允许你抛出已检查的异常。 - Misha

7
最简单的方法是:
list.forEach( x -> {
    if(x.color.equals("Black")) throw new RuntimeException();
});

3
如果您使用这种方法,则无需调用“stream()”。只需要使用“list.forEach”即可。 - Alexis C.
你当然是对的,我被楼主的代码示例蒙住了眼睛。 - Chirlo
stream.foreach 和 foreach 有什么区别? - Bick
3
Iterable.forEach 方法不会创建一个 Stream,它仅限于迭代操作,并且不能与 mapfilter 等方法相结合。 - Holger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接