AStream是一个AutoCloseable,如果基于 I/O,应该在一个try-with-resource块中使用。通过 插入的基于 I/O 的中间流flatMap()呢?例子:
try (var foos = foos()) {
return foos.flatMap(Foo::bars).toArray(Bar[]::new);
}
对比
try (var foos = foos()) {
return foos.flatMap(foo -> {
try (var bars = foo.bars()) {
return bars;
}
}).toArray(Bar[]::new);
}
flatMap()文档说:
每个映射流在其内容被放入该流后关闭。
嗯,这就是幸福的道路。如果中间发生异常怎么办?然后该流会保持未关闭状态并可能泄漏资源吗?那么我是否应该始终将 atry-with-resource也用于中间流?
慕田峪7331174
ABOUTYOU
相关分类