Java 8流:通过中间操作关闭流

时间:2019-01-26 17:05:25

标签: java java-8 java-stream

我知道intermediate and terminal stream operations之间的区别。但是,当我遇到下面的代码示例时,我无法完全弄清楚原因,为什么第2行中的filter操作关闭流,导致第3行中出现以下异常:

  

java.lang.IllegalStateException:流已被操作   或关闭

为什么中间过滤器操作会关闭流? 在没有终端操作和/或未将其分配给变量的情况下在流上调用中间操作时,是否总是这样?


代码示例:

Stream<Integer> stream = Stream.of(1, 2, 3);
stream.filter(d -> d > 1);
stream.filter(d -> d > 2).forEach(System.out::print);

1 个答案:

答案 0 :(得分:0)

重点是方法过滤器返回新流。旧版本在过滤后终止。

/**
 * Returns a stream consisting of the elements of this stream that match
 * the given predicate.
 *
 * <p>This is an <a href="package-summary.html#StreamOps">intermediate
 * operation</a>.
 *
 * @param predicate a <a href="package-summary.html#NonInterference">non-interfering</a>,
 *                  <a href="package-summary.html#Statelessness">stateless</a>
 *                  predicate to apply to each element to determine if it
 *                  should be included
 * @return the new stream
 */
Stream<T> filter(Predicate<? super T> predicate);