Fermer le flux Java 8
Si nous utilisons un flux Java 8 comme list.stream().filter(....).collect(..).....
Quand est-il fermé ce flux?
Est-ce une bonne pratique que nous fermions le flux us comme exemple suivant?
Stream<String> stream = list.stream();
String result = stream.limit(10).collect(Collectors.joining(""));
stream.close();
1 answers
Il n'est généralement pas nécessaire de fermer les cours d'eau du tout. Il vous suffit de fermer les flux qui utilisent des ressources d'E / S.
Les flux ont une méthode
BaseStream.close()
et implémententAutoCloseable
, mais presque toutes les instances de flux n'ont pas réellement besoin d'être fermées après utilisation. Généralement, seuls les flux dont la source est un canal d'E / S (tels que ceux renvoyés parFiles.lines(Path, Charset)
) nécessiteront une fermeture. La plupart des flux sont soutenus par des collections, des tableaux ou des fonctions de génération, qui ne nécessitent pas de gestion des ressources spéciales. (Si un flux nécessite une fermeture, il peut être déclaré en tant que ressource dans une instruction try-with-resources.)
Si vous devez fermer un flux, la meilleure pratique serait d'utiliser l'instruction try-with-resources:
try ( Stream<String> stream = Files.lines(path, charset) ) {
// do something
}