Java8 Stream API では collector とかを複数回呼ぶと実行時エラーになる
以下のようなコードは、実行時エラーになる。
Stream<String> ss = Arrays.asList("hoge", "fuga").stream();
System.out.println(ss.count());
System.out.println(ss.count());
スタックトレースは以下のようになる。
stream has already been operated upon or closed
java.lang.IllegalStateException
at java.util.stream.AbstractPipeline.<init>(AbstractPipeline.java:203)
at java.util.stream.LongPipeline.<init>(LongPipeline.java:91)
at java.util.stream.LongPipeline$StatelessOp.<init>(LongPipeline.java:572)
at java.util.stream.ReferencePipeline$5.<init>(ReferencePipeline.java:221)
at java.util.stream.ReferencePipeline.mapToLong(ReferencePipeline.java:220)
at java.util.stream.ReferencePipeline.count(ReferencePipeline.java:526)
at StreamSampleTest.testStreamTwice(StreamSampleTest.java:21)
...
実行時エラーになるのはつらい。慣れてないときはこういうの書いちゃう人大そう。
というようなことがあるので、Stream
という話を Java についてカジュアルに語るチャンネルである #java-casual@freenode でしていたというメモ。