stream.spliterator()
是否隱式關閉了stream
,或者需要在之後明確關閉它?stream.spliterator()是否關閉流?
Stream<String> stream = Stream.of("a", "b", "c");
Spliterator<T> spliterator = stream.spliterator();
// Some low lever operation with the spliterator
stream.close(); // do we need to close?
乍一看,似乎.spliterator()
方法關閉stream
,但沒有叫stream.close()
。至少如果我在調用.spliterator()
方法後馬上關閉它,似乎不會影響分割器的操作。
Stream<String> stream = Stream.of("a", "b", "c").limit(2);
Spliterator<T> spliterator = stream.spliterator();
stream.close();
// Some low lever operation with the spliterator
這個問題可以被擴展到其它stream
方法,例如,該.findAny()
。
stream.findAny() // Can I assume that I don't need to close the stream?
stream.onClose(() -> System.out.println("hi!")).findAny()`
// when the `onClose()` action will be called?
原因這個問題是有深刻的清晰度當stream
需要明確地關閉,在我並不需要明確地關閉它的情況下,當onClose()
定義的動作將發生?
Stream接口擴展了AutoCloseable接口,所以我在guest垃圾收集器處理流時會調用'onClose'動作。但最好儘快關閉它。 – Tet
不,沒有垃圾收集器驅動關閉流 - 如果流有這樣一個終結器,結果將是災難性的。底層資源本身*可能*具有自動清理,但取決於資源。但這並不意味着執行任何註冊到流中的關閉處理程序。 – Holger
只是爲了增加細節,這裏是一個很好的洞察流和[TWR斯圖爾特](https://stackoverflow.com/a/22929990/1746118) – nullpointer