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();
Author: Pau, 2016-08-01

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.

De la documentation du flux :

Les flux ont une méthode BaseStream.close() et implémentent AutoCloseable, 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 par Files.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
}
 34
Author: kapex, 2017-12-30 15:33:06