RFR: 5015163 "(str) String merge/join that is the inverse of String.split()" into JDK 8
Paul Sandoz
paul.sandoz at oracle.com
Thu May 3 08:38:23 UTC 2012
On May 2, 2012, at 8:39 AM, Stuart Marks wrote:
>
> It's fun to think about how joining would work in a lambda/streamy kind of world, e.g.
>
> stream.infix(",").join(new StringBuilder()).toString()
>
Indeed :-) [Paul ducks as he makes up stuff!]:
String s = stream.interpose(",").reduce(new ToStringReducer());
since join can be considered a reduce operation, and the above could be equivalent to:
String s = stream.interleave(repeat(",")).drop(1).reduce(new ToStringReducer()); [*]
As well as:
String s = stream.join(",") // can be optimal implementation specific to strings, String.join could defer to this
> or some such. There are a bunch of issues to consider here though, such as special-casing of types in the input stream, e.g., append CharSequence directly instead of calling toString(), treat int value as a Unicode code point, etc. There are also issues about the result type: StringBuilder? String? Appendable?
>
> As much as I like the lambda stuff, though, I don't think having stream-based joining will supplant the need to have a good old-fashioned
>
> String.join(",", ...bunch of strings...)
>
Yes.
Paul.
[*] interleave could support one or more streams
More information about the core-libs-dev
mailing list