Withdrawn: 8274412: Add a method to Stream API to consume and close the stream without using try-with-resources

Tagir F.Valeev tvaleev at openjdk.java.net
Sat Oct 16 03:59:52 UTC 2021


On Sun, 3 Oct 2021 11:00:25 GMT, Tagir F. Valeev <tvaleev at openjdk.org> wrote:

> Currently, when the stream holds a resource, it's necessary to wrap it with try-with-resources. This undermines the compact and fluent style of stream API calls. For example, if we want to get the `List` of files inside the directory and timely close the underlying filehandle, we should use something like this:
> 
> 
> List<Path> paths;
> try (Stream<Path> stream = Files.list(Path.of("/etc"))) {
>     paths = stream.toList();
> }
> // use paths
> 
> 
> I suggest to add a new default method to Stream interface named `consumeAndClose`, which allows performing terminal stream operation and closing the stream at the same time. It may look like this:
> 
> 
>     default <R> R consumeAndClose(Function<? super Stream<T>, ? extends R> function) {
>         Objects.requireNonNull(function);
>         try(this) {
>             return function.apply(this);
>         }
>     }
> 
> 
> Now, it will be possible to get the list of the files in the fluent manner:
> 
> 
> List<Path> list = Files.list(Path.of("/etc")).consumeAndClose(Stream::toList);

This pull request has been closed without being integrated.

-------------

PR: https://git.openjdk.java.net/jdk/pull/5796


More information about the core-libs-dev mailing list