On 18/11/2013 08:46, Tomasz Kowalczewski wrote:
3. If I want the stream to be closed I need to do:

reader.lines().onClose(is::close).doStreamyStuff().collect(...);

where *is* is an underlying InputStream.

The problem with this code is that ::close throws IOException which is not
compatible with Runnable accepted by onClose(); Is there a better way? Some
wrapper I can use to inject a call to close?

As you have a reference to the buffered reader it might be simplest to use try-with-resources so that the reader (and hence the underlying input stream) will be closed, something like:

try (BufferReader reader = ...) {
  reader.lines().doStreamyStuff().collect(...);
}

Alternatively, if the reader is to a file then you can use Files.lines as it returns a Stream that will arrange to close the underlying file when you close the stream.

Otherwise if you really need to really want the stream close to close the underlying input stream (or reader more likely) then the runnable will need to translate the checked IOException to an unchecked exception. The new java.io.UncheckedIOException is probably what you want.

-Alan.







Reply via email to