В конечном итоге Java 8 поставляется с классом StringJoiner в составе пакета java.util. Я не думаю, что реализация соединения строк сильно отличается от нашего подхода старой школы с использованием StringBuffer/StringBuilder. Мы увидим использование StringJoiner и его внутреннюю реализацию.

Например, у меня есть две строки «Smart» и «Techie», и я хочу объединить эти строки как [Smart,Techie]. В этом случае у меня есть префикс как «[», суффикс как «]» и разделитель как «,». StringJoiner имеет два конструктора, как показано ниже.

StringJoiner(CharSequence delimiter)
StringJoiner(CharSequence delimiter, CharSequence prefix, CharSequence suffix)

Мы хотим иметь префикс и суффикс, поэтому мы будем использовать второй конструктор для нашего примера.

StringJoiner sjr = new StringJoiner(",", "[", "]");
sjr.add("Smart").add("Techie");
System.out.println("The final Joined string is " + sjr);

Если мы не хотим иметь префикс и суффикс, то:

StringJoiner sjr1 = new StringJoiner(",");
sjr1.add("Smart").add("Techie");
System.out.println("The final Joined string is " + sjr1);

Теперь мы увидим реализацию методов add и toString().

public StringJoiner add(CharSequence newElement) {
prepareBuilder().append(newElement);
return this;
}

Реализация prepareBuilder() приведена ниже.

private StringBuilder prepareBuilder() {
if (value != null) {
value.append(delimiter);
} else {
value = new StringBuilder().append(prefix);
}
return value;
}

Из приведенных выше реализаций видно, что StringJoiner следует подходу старой школы.

Реализация toString() приведена ниже.

public String toString() {
if (value == null) {
return emptyValue;
} else {
if (suffix.equals("")) {
return value.toString();
} else {
int initialLength = value.length();
String result = value.append(suffix).toString();
// reset value to pre-append initialLength
value.setLength(initialLength);
return result;
}
}

Удачного обучения!!!