Ulf,

My point was simply that none of these classes provide methods that accept 
java.lang.Object. IMO, the scenario when we join elements into a String by 
calling toString on each element prior to append it -- is the most common 
scenario (maybe except for when element is a String itself). That is instead of 
doing this:

        Iterable<?> whatever = ...
        String s = String.join(whatever);

we have to do (at least) something like this:

        Iterable<?> whatever = ...
        whatever.forEach(w -> builder.append(w.toString());
        String s = builder.toString();

or this:

        String s = StreamSupport.stream(whatever.spliterator(), false /* or 
true */)
                                .map(Object::toString)
                                .collect(Collectors.joining(", "));

That is, it's hardly ever a concise one-liner. An 'addAll' method in 
j.u.StringJoiner could have saved us, but there isn't one.

(I'm sure there were plenty of engineering reasons not to do things I've 
mentioned)

-Pavel

On 11 Aug 2014, at 16:38, Ulf Zibis <ulf.zi...@cosoco.de> wrote:

> 
> Am 11.08.2014 um 16:33 schrieb Pavel Rappo:
>> Unfortunately, neither java.util.StringJoiner nor String.join have perfect 
>> (but who has?) APIs. So it's up to us to figure out the best way of joining 
>> elements.
> 
> Maybe remember my thoughts from here:
> http://mail.openjdk.java.net/pipermail/core-libs-dev/2013-April/016172.html
> http://mail.openjdk.java.net/pipermail/core-libs-dev/2014-January/024761.html
> 
> Would it be possible to inherit StringJoiner from StringBuilder in some way?
> Then a mixture of concatanation, StringBuilder and StringJoiner after Javac 
> would end up in one StringBuilder instance. We also could profit from 
> StringJoiners initial capacity capability.
> 
> -Ulf
> 
> 

Reply via email to