RFR: String.join(), StringJoiner additions (original) (raw)

Ulf Zibis Ulf.Zibis at CoSoCo.de
Thu Apr 18 23:38:40 UTC 2013


Am 18.04.2013 19:37, schrieb Jim Gish:

On 04/18/2013 08:49 AM, Ulf Zibis wrote: Hi,

I'm wondering, that StringJoiner has some logic for pre/suffix, but nothing to loop the elements themselves :-( To me, StringJoiner is a useless complicated box around StringBuilder, and imagine, someone needs thread-safety. It also slows down performance, as it needs additional instances and additional class to be loaded (critical at VM startup). Instead please add to StringBuilder and StringBuffer: append(CharSequence... elements); append(char delimiter, CharSequence... elements); append(char delimiter, Iterable<? extends CharSequence> elements); cut(int len); // removes len chars at the end of the sequence optional: append(CharSequence delimiter, CharSequence... elements); append(CharSequence delimiter, Iterable<? extends CharSequence> elements); I started off with something similar, but it was stripped out when Henry did the performance improvements.

Hm, I have no idea, how above suggestions should prevent performance improvements. Can you help me?

Given that most people feel that this is going to be put to heavy-weight usage, it doesn't seem to merit too much emphasis on performance or complicating the implementation at this point.

Your implementation has 1 class with 7 methods 2 additional methods in String To cover the same functionality, above approach basically only needs 2 additional methods in StringBuilder, has better performance, so what is complicated on that?

@Martin: What is your opinion?

Thanks,

-Ulf

For performance reasons, append should always append the trailing delimeter, which could be cut at the end.

It's questionable, if class string needs a static (=no relation to an existing string in contrast to non-static split()) join method, as it seduces to "[" + String.join(...) + "]" which needs some effort from javac side to optimize to a single StringBuilder task. IMO we better had StringBuilder.join(...), so javac could easily optimize to: new StringBuilder().append('[').append(',', someStrings).cut(1).append(']').toString() -Ulf

Am 18.04.2013 00:07, schrieb Martin Buchholz: I'm still wondering about whether a joiner utility should support a prefix and suffix. The obvious uses for this are collection class toString methods, but we already know that we can and should implement those with a single precise char[] construction, so should not use StringJoiner, or at least not this StringJoiner implementation. And if we're just talking about pure convenience, it's hard to beat "[" + String.join(...) + "]"

On Wed, Apr 17, 2013 at 2:49 PM, Jim Gish <jim.gish at oracle.com> wrote: Here's an update: http://cr.openjdk.java.net/~** jgish/Bugs-5015163-7172553/<http://cr.openjdk.java.net/~jgish/Bugs-5015163-7172553/><_ _http://cr.openjdk.java.net/%**7Ejgish/Bugs-5015163-7172553/<http://cr.openjdk.java.net/%7Ejgish/Bugs-5015163-7172553/> Jim



More information about the core-libs-dev mailing list