When is a Java 8 Stream considered to be consumed?

后端 未结 2 1913
一整个雨季
一整个雨季 2021-01-07 20:15

My understanding was that a Java 8 Stream is considered to be consumed once a terminal operation, such as forEach() or count(), is per

2条回答
  •  不知归路
    2021-01-07 20:41

    According to the Stream Javadoc:

    A stream should be operated on (invoking an intermediate or terminal stream operation) only once. This rules out, for example, "forked" streams, where the same source feeds two or more pipelines, or multiple traversals of the same stream. A stream implementation may throw IllegalStateException if it detects that the stream is being reused. However, since some stream operations may return their receiver rather than a new stream object, it may not be possible to detect reuse in all cases.

    In your case, the call to filter itself is detecting an attempt to fork your stream into two different streams. Rather than wait and cause problems once the terminal operation is added, it's performing a pre-emptive strike to make it clear from any stack trace you get exactly where your problem is.

提交回复
热议问题