Loose-ends wrapup
Jim Mayer
jim at pentastich.org
Sat May 11 21:34:50 PDT 2013
Sorry... didn't mean to send that quite yet. I'll just stop :-)
Jim
On Sun, May 12, 2013 at 12:26 AM, Jim Mayer <jim at pentastich.org> wrote:
> OK... that was a silly request. A Collector can't bridge to a reader
> because it has to consume all of its input.
>
> I liked the idea of a bridge from Stream to Reader, so I downloaded JDK8
> b89 and wrote a "StreamReader" class that acts like a StringJoiner and uses
> Stream.iterate to generate a sequence of values. The constructor looks
> like:
>
> StreamReader(Stream<? extends CharSequence> stream, String prefix,
> String separator, String suffix)
>
> It works nicely, but the usage is just a bit awkward because it breaks
> from the fluid API that stream uses. For example, a line from my test
> program looks like:
>
> BufferedReader reader = new BufferedReader(new
> StreamReader(Arrays.stream(args), "<", ", ", ">"))
>
> This made me wonder if there was a reasonable way to fluidly bridge from a
> stream to another data type without fully consuming the stream. I didn't
> find anything like that in the existing API, but I think that it would be
> very easy to add.
>
> For example, consider an "applyTo" method on Stream:
>
> <R> R applyTo(Function<Stream<T>,R> function);
>
> It could even have a default implementation:
>
> default <R> R applyTo(Function<Stream<T>,R> function) {
> return function.apply(this);
> }
>
> Given an "applyTo" method on Stream, the example that I gave above could
> be written:
>
> BufferedReader reader = Arrays.stream(args).applyTo(s -> new
> BufferedReader(new StreamReader(s, "<", ", ", ">")));
>
> To me, this reads a lot like "collect", but allows the use of lazy data
> structures that do not fully consume the stream.
>
> Other names I thought of were "applyStreamTo", "passTo", "chainTo", or
> even just "to" (by analogy to "toString", etc.), which could yield a form
> like:
>
>
> -- Jim
>
>
> On Fri, May 10, 2013 at 11:58 PM, Jim Mayer <jim at pentastich.org> wrote:
>
>> How about a Collectors method that bridges to a Reader? I'm thinking of
>> something that worked like a combination of toStringJoiner or to
>> toStringBuilder and StringStream but that didn't require buffering the
>> entire output.
>>
>> A more general bridge to Reader/Writer and IOStream would also be cool,
>> though one would have to think through how to handle IOException (I'd just
>> wrap them in a RuntimeException). That couldn't happen in the case above,
>> though.
>>
>> Jim
>> On May 9, 2013 3:15 PM, "Brian Goetz" <brian.goetz at oracle.com> wrote:
>>
>>> The majority of the lambda libraries code has been put back to the jdk8
>>> repositories. I'm gathering a list of loose ends that we might want to
>>> circle back to. The bar for nontrivial new features at this point is high,
>>> but there are plenty of things in the "small tweaks" category that we can
>>> do.
>>>
>>> There's also lots of work remaining in improving the implementation and
>>> especially the documentation and specification. This is a really great
>>> time to contribute improvements in this area.
>>>
>>> Streams -- lingering feature ideas
>>>
>>> - Additional tweaking on range generators (see Paul's emails)
>>> - Convenience ints() and longs() generator methods? (ditto)
>>> - Collector for frequency counting?
>>> - Support for state-based cancelation (e.g.,
>>> cancelWhen(BooleanSupplier))
>>> - Support for content-based limiting (takeWhile, skipUntil)
>>> - Convenience methods like toList() on Stream
>>>
>>> SAMs
>>> - Additional static or default methods on standard SAMs?
>>>
>>> Point lambdafications
>>> - Gotta be more of these?
>>>
>>> Helper classes
>>> - (I hesitate to even suggest): Optional.{filter,map,flatMap}
>>> Now that Stream.flatMap is settled, it becomes reasonable to consider
>>> these.
>>>
>>> What others have I missed?
>>>
>>>
>>>
>>>
>
More information about the lambda-libs-spec-observers
mailing list