Java 8 Streams e tente com recursos

Eu pensei que a API de fluxo estivesse aqui para facilitar a leitura do código. Achei algo bastante irritante. oStream interface (java.util.stream.Stream) estende oAutoClosable interface (java.lang.AutoCloseable)

Portanto, se você deseja fechar corretamente seus fluxos, use o try com recursos.

Listagem 1. Não é muito bom, os fluxos não estão fechados.

   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());
}

Listagem 2. Com 2 tentativas imbricadas :(

   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());
        }
    }
}

Listagem 3. Comomap retorna um fluxo, tanto ostream() e amap() funções precisam ser fechadas.

    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());
    }
}

O exemplo que dou não faz sentido. Eu troqueiPath para imagens jpg comInteger, pelo bem do exemplo. Mas não deixe você se distrair com esses detalhes.

Qual é a melhor maneira de lidar com esses fluxos que podem ser fechados automaticamente. Devo dizer que não estou satisfeito com nenhuma das três opções que mostrei. O que você acha? Existem ainda outras soluções mais elegantes?

questionAnswers(4)

yourAnswerToTheQuestion