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?