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. 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.

Thanks

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.g...@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


On 04/17/2013 03:15 PM, Mike Duigou wrote:

String::

line 1253: This should use {@code } rather than <code></code>. I think
regular spaces are OK as well. &nbsp; seems inappropriate.

lines 2425/2467: elements may not be null either.

I can tell you (or maybe it's just me) are itching to change :

for (CharSequence cs: elements) {
2477             joiner.add(cs);
2478         }

to:

elements.forEach(joiner::add);

StringJoiner::

- <blockquote> isn't needed around <pre> as it's already a <div> you
probably mean to do

<pre> {@code
...
}</pre>

for code samples.

- It would be nice if the empty output generation in three arg
constructor could be suppressed unless needed. Perhaps a special (not null
please!) sentinel value?

- Four arg constructor doesn't include emptyOutput in @throws NPE


On Apr 11 2013, at 15:33 , Jim Gish wrote:

Please review http://cr.openjdk.java.net/~**jgish/Bugs-5015163-7175206-*
*7172553/<http://cr.openjdk.java.net/~jgish/Bugs-5015163-7175206-7172553/>< http://cr.openjdk.java.net/%**7Ejgish/Bugs-5015163-7175206-**7172553/<http://cr.openjdk.java.net/%7Ejgish/Bugs-5015163-7175206-7172553/>
These are changes that we made in lambda that we're now bringing into
JDK8.

I've made a couple of additions - making StringJoiner final and adding a
couple of constructors to set the emptyOutput chars.

Thanks,
    Jim

--
Jim Gish | Consulting Member of Technical Staff | +1.781.442.0304
Oracle Java Platform Group | Core Libraries Team
35 Network Drive
Burlington, MA 01803
jim.g...@oracle.com


--
Jim Gish | Consulting Member of Technical Staff | +1.781.442.0304
Oracle Java Platform Group | Core Libraries Team
35 Network Drive
Burlington, MA 01803
jim.g...@oracle.com




--
Jim Gish | Consulting Member of Technical Staff | +1.781.442.0304
Oracle Java Platform Group | Core Libraries Team
35 Network Drive
Burlington, MA 01803
jim.g...@oracle.com

Reply via email to