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

时间:2015-05-04 13:21:44

标签: exception java-8 java-stream

我有以下数组

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

如果它包含某个值

,我想迭代它并抛出异常

即。

如果至少有一个

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

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

2 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:7)

最简单的是:

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