我有一个Iterator [InputStream],我将其映射以检索单个结果:
val streams: Iterator[InputStream[CustomType]] = retrieveStreams()
val results: Iterator[MyResultType] = streams flatMap (c => transformToResult(c))
这可以按预期工作,这意味着我可以从结果迭代器中检索MyResultType类型的值。我唯一的问题是个别的InputStream永远不会被关闭。有没有办法做到这一点?
答案 0 :(得分:2)
没有神奇的方法来关闭它,或者至少保证它会被关闭。因此,您必须自己关闭每个流。看一下贷款模式,这样可以减少错误:Loaner Pattern in Scala。
在您的情况下,您没有一个资源可以发布,而是一组资源,因此请相应地调整您的自定义贷款模式。
由于您正在处理Iterator
,因此您可能无限制地提供InputStream
s,在这种情况下,您的transformToResult
函数必须在元素级别关闭流或其他内容。
看起来像这样:
val streams: Iterator[InputStream[CustomType]] = retrieveStreams()
val results: Iterator[MyResultType] =
streams flatMap (c => yourLoaner(c)(transformToResult))