Java 8 流式传输并尝试使用资源
我认为流API是为了让代码更容易阅读。我发现了一些很烦人的东西。接口扩展接口。Stream
java.lang.AutoCloseable
因此,如果要正确关闭流,则必须使用 try with 资源。
清单 1.不是很好,溪流没有关闭。
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());
}
清单 2.有 2 个嵌套尝试
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());
}
}
}
清单 3.当返回流时,必须同时关闭 函数 和 函数。map
stream()
map()
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());
}
}
我举的例子没有任何意义。为了这个例子,我用 替换了 jpg 图像。但不要让你被这些细节分散注意力。Path
Integer
使用那些自动关闭的流的最佳方式是什么。我不得不说,我对我展示的3个选项中的任何一个都不满意。你觉得怎么样?还有其他更优雅的解决方案吗?