在过滤器中抛出异常

时间:2015-08-22 17:48:02

标签: java java-8 java-stream

我已经定义了这个流:

public int sumNumbers(int[] numbers) {
    return IntStream.of(numbers)
            .filter(n -> n <= 1000)
            .sum();
}

我总结了不高于1000的所有整数。但是现在我想做的是,如果数组的任何元素是负数,则抛出异常。

我知道如何在旧式模式下执行此操作,但我想知道是否存在Stream.filter()的任何机制,我可以在其中定义过滤器和该过滤器的异常情况

只是为了澄清我想抛出异常,而不是像其他问题那样控制运行时异常。

这里的想法是,如果我的过滤器在以下情况中为真:

filter(n -> n < 0 throw Exception)

1 个答案:

答案 0 :(得分:7)

在JDK中有一个IllegalArgumentException未经检查并通知错误的函数输入,因此可以在这里使用:

IntStream.of(numbers)
         .peek(n -> {
           if (n < 0) throw new IllegalArgumentException(String.valueOf(n));
         })
         .sum();

通常,目前Java正朝着未经检查的例外发展。在Java-8中添加了甚至UncheckedIOException类!