Into
Brian Goetz
brian.goetz at oracle.com
Wed Dec 26 10:00:10 PST 2012
> I was just translating a simple example from Uncle Bob's recent FP
> resolution(*). The most difficult problem given the current state of
> jkd8lambda was trying to print a stream...
>
> Using StringJoiner seems like the coolest way to do this currently:
>
> stream.into(new StringJoiner(", ", "[", "]"))
Right, that's the current plan. StringJoiner implements
Stream.Destination.
> But how's this supposed to work without into()?
Well, that's one of the things to figure out. I think it fits pretty
nicely as a mutable reduce.
make-accumulator() -> new StringJoiner()
accumulate(a, e) -> a.add(e)
combine(a1, a2) -> if (!a2.isEmpty) a1.addAll(a2)
This parallelizes well. The only trickiness is adding the pre/post
strings, which have to be deferred to the very end. All doable.
> Btw, the lack of a generic Joiner that accepts any ol' object or
> primitive is causing me some grief. Given a stream of ints or even
> Integers, having to manually map(Object::toString) seems like something
> StringJoiner should be doing automatically.
Yeah, it should accept Object and call toString on it.
String.toString() is cheap.
More information about the lambda-libs-spec-observers
mailing list