Schließt die die stream
implizit, oder muss sie explizit danach geschlossen werden?Schließt der Stream.spliterator() den 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?
Auf den ersten Blick scheint es, dass die .spliterator()
Methode, um die stream
schließt, aber ohne stream.close()
aufrufen. Zumindest wenn ich es sofort schließe, nachdem die .spliterator()
Methode aufgerufen wird, scheint es keine Zuneigung der Spliteratoroperationen zu sein.
Stream<String> stream = Stream.of("a", "b", "c").limit(2);
Spliterator<T> spliterator = stream.spliterator();
stream.close();
// Some low lever operation with the spliterator
Diese Frage kann auf andere stream
Methoden erweitert werden, beispielsweise die .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?
Der Grund für diese Frage ist tief Klarheit zu haben, wenn ein stream
Bedürfnisse explizit geschlossen werden, und in den Fällen, in denen ich brauche nicht ausdrücklich um es zu schließen, wenn die onClose()
definierten Aktionen stattfinden?
Stream-Schnittstelle erweitert die AutoCloseable-Schnittstelle, so dass Gast die OnClose-Aktionen irgendwann aufgerufen werden, wenn der Garbage Collector den Stream disponiert. Es ist jedoch die beste Vorgehensweise, es so schnell wie möglich zu schließen. – Tet
Nein, es gibt keinen Garbage Collector, der das Schließen des Streams steuert - und die Ergebnisse wären katastrophal, wenn der Stream einen solchen Finalizer hätte. Die zugrunde liegende Ressource selbst * kann eine automatische Bereinigung haben, aber das hängt von der Ressource ab. Das bedeutet jedoch nicht, dass ein Close-Handler ausgeführt wird, der für den Stream registriert ist. – Holger
Nur um Details hinzuzufügen, hier ist ein guter Einblick über Streams und [TWR von Stuart] (https://Stackoverflow.com/a/22929990/1746118) – nullpointer