Java 8 Streams y prueba con recursos

Pensé que la API de transmisión estaba aquí para hacer que el código fuera más fácil de leer. Encontré algo bastante molesto. losStream interfaz (java.util.stream.Stream) extiende elAutoClosable interfaz (java.lang.AutoCloseable)

Entonces, si desea cerrar correctamente sus transmisiones, debe usar probar con recursos.

Listado 1. No es muy agradable, las corrientes no están cerradas.

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

Listado 2. Con 2 intentos imbricados :(

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

Listado 3. Comomap devuelve una secuencia, tanto elstream() y elmap() Las funciones tienen que estar cerradas.

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

El ejemplo que doy no tiene ningún sentido. ReemplacéPath a imágenes jpg conInteger, por el bien del ejemplo. Pero no te dejes distraer por estos detalles.

¿Cuál es la mejor manera de andar con esas transmisiones automáticas que se pueden cerrar? Tengo que decir que no estoy satisfecho con ninguna de las 3 opciones que mostré. ¿Qué piensas? ¿Existen otras soluciones más elegantes?

Respuestas a la pregunta(4)

Su respuesta a la pregunta