stream
の別のアクションに問題があります。String
です。Java 8 - 文字列のストリーム上で区別 - IllegalStateException
Stream<String> names = Arrays.asList("NAME A", "NAME B", "NAME A").stream();
names.distinct();
System.out.println(names.collect(Collectors.joining(",")));
その後、私は例外受け取っ:
Exception in thread "main" java.lang.IllegalStateException: stream has already been operated upon or closed
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:229)
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
at com.Test.main(Test.java:62)
をしかし、私はこのようなコードのこの部分を書いた場合:
Stream<String> names = Arrays.asList("NAME A", "NAME B", "NAME A").stream();
final Stream<String> distinct = names.distinct();
System.out.println(distinct.collect(Collectors.joining(",")));
すべてがOKです。このストリームの別個の要素(はObject.equalsに係る(オブジェクト))からなるストリームを返し
異なるストリーム():別個の
ドキュメント言います。 順序付けられたストリームの場合、別個の要素の選択は安定しています(重複した要素の場合、エンカウンター順で最初に出現する要素は保持されます)。 これはステートフルな中間操作です。
私は間違っていますか?
ありがとうございます。
@choasia、慎重にお読みください – MateuszW90
中間操作で生成された新しいストリームを無視し、1つのストリームを1回しか操作できないためですか? – choasia