我正在从这样的java中读取文本BufferedReader:
Stream.continually(reader.readLine).takeWhile {
case null => reader.close; false
case _ => true
}
Run Code Online (Sandbox Code Playgroud)
这有效,但对我来说似乎有点笨拙.我希望能有像.whenDone上Stream,这样我就可以告诉它整个事情后关闭读者被消耗掉,然后就去做.takeWhile(_ != null).
有什么方法可以做到这一点我不知道吗?或者,也许,更好的方法来从Java得到线流Reader(如果它是一个InputStream,我只是做Source.fromInputStream了例子,但似乎并没有成为同等Reader......注意,这只能部分地解决但问题是,因为人们可能想与其他"可关闭的"对象做同样的事情 - ResultSet比如说一个例子)?
您可以.whenDone通过附加另一个来获得该行为Stream。这使得代码更具表现力,也可以用于其他情况。这是一些东西,但我认为远非完美。
def closeStream: Stream[Nothing] = {
reader.close
Stream.Empty
}
Stream.continually(reader.readLine).takeWhile(_ != null) #::: closeStream
Run Code Online (Sandbox Code Playgroud)