Java 8 Streams und versuchen Sie es mit Ressourcen

Ich dachte, dass die Stream-API hier ist, um den Code leichter lesbar zu machen. Ich fand etwas ziemlich nervig. DasStream interface java.util.stream.Stream) erweitert dasAutoClosable interface java.lang.AutoCloseable)

So wenn Sie Ihre Streams korrekt schließen möchten, müssen Sie try with resources verwenden.

Listing 1. Nicht sehr schön, Streams sind nicht geschlossen.

   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. Mit 2 imbricated Versuch:

   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. Wiemap gibt einen Stream zurück, sowohl dasstream() und dermap() Funktionen müssen geschlossen sein.

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

Das Beispiel, das ich gebe, ergibt keinen Sinn. Ich ersetztePath um Bilder mit @ zu jInteger, für das Beispiel. Aber lassen Sie sich von diesen Details nicht ablenken.

Was ist der beste Weg, um mit diesen automatisch schließbaren Streams umzugehen. Ich muss sagen, dass ich mit keiner der drei Optionen, die ich gezeigt habe, zufrieden bin. Was denkst du? Gibt es noch andere elegantere Lösungen?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage