我對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
是不是因爲您忽略了由中間操作生成的新流,而且一個流只能操作一次。 – choasia