stream.spliterator()
は暗黙的に を閉じますかstream
、それとも後で明示的に閉じる必要がありますか?
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()
定義されたアクションがいつ実行されるかを明確にするためです。