Java 8 Ruisseaux et essayer avec des ressources

J'ai pensé que le flux de l'API était là pour rendre le code plus facile à lire.
J'ai trouvé quelque chose d'assez ennuyeux. Le Stream interface (java.util.stream.Stream) s'étend le AutoClosable interface (java.lang.AutoCloseable)

Donc, si vous voulez fermer correctement votre flux, vous devez utiliser l'essayer avec des ressources.

Listing 1. Pas très joli, les flux ne sont pas fermées.

   public void noTryWithResource() {
    Set<Integer> photos = new HashSet<Integer>(Arrays.asList(1, 2, 3));

   @SuppressWarnings("resource") List<ImageView> collect = photos.stream()
            .map(photo -> new ImageView(new Image(String.valueOf(photo)))).collect(Collectors.<ImageView>toList());
}

Listing 2. Avec 2 imbriquées à l'essayer 🙁

   public void tryWithResource() {
    Set<Integer> photos = new HashSet<Integer>(Arrays.asList(1, 2, 3));

    try (Stream<Integer> stream = photos.stream()) {
        try (Stream<ImageView> map = stream
                .map(photo -> new ImageView(new Image(String.valueOf(photo))))) {
            List<ImageView> collect = map.collect(Collectors.<ImageView>toList());
        }
    }
}

Listing 3. Comme map renvoie un flux de données, à la fois la stream() et la map() fonctions doivent être fermées.

    public void tryWithResource2() {
    Set<Integer> photos = new HashSet<Integer>(Arrays.asList(1, 2, 3));

    try (Stream<Integer> stream = photos.stream();
         Stream<ImageView> map = stream
                 .map(photo -> new ImageView(new Image(String.valueOf(photo))))) {
        List<ImageView> collect = map.collect(Collectors.<ImageView>toList());
    }
}

L'exemple que je donne n'a pas de sens. J'ai remplacé Path à des images jpg avec Integer, pour le bien de l'exemple. Mais ne laissez pas vous distraire par ces détails.

Quelle est la meilleure façon de se promener avec ces auto caisses de flux.
Je dois dire que je ne suis pas satisfait de l'un des 3 options je l'ai montré.
Qu'en pensez-vous? Existe-il encore d'autres solutions élégantes?

InformationsquelleAutor fan | 2014-09-11