В класс String добавили метод join, который служит для соединения строк с заданным разделителем.

String s = String.join("-", "2017", "08", "23");
System.out.println(s);

Output:
2017-08-23

Также можно передавать коллекцию:

List<String> cities  = Arrays.asList("Minsk", "Moscow" , "Kiev", "Ljubljana");
String citiesWithComma = String.join("," , cities);
System.out.println(citiesWithComma);

Output:
Minsk,Moscow,Kiev,Ljubljana

Добавили также специальный класс StringJoiner. Тут мы в конструктор просто передали разделитель запятую:

StringJoiner joiner = new StringJoiner(",");
joiner.add("Minsk");
joiner.add("Moscow");
joiner.add("Kiev");
joiner.add("Ljubljana");
System.out.println(joiner);

Output:
Minsk,Moscow,Kiev,Ljubljana

Благо, метод add возвращает this, а не void. Поэтому проще написать так:

StringJoiner joiner2 = new StringJoiner(",");
joiner2.add("Minsk")
.add("Moscow")
.add("Kiev")
.add("Ljubljana");
System.out.println(joiner2);

Output:
Minsk,Moscow,Kiev,Ljubljana

Также в конструктор в StringJoiner можно передавать не только разделитель, но и начало и
конец строки:

StringJoiner joiner3 = new StringJoiner(",", "[", "]");
joiner3.merge(joiner2);
System.out.println(joiner3);

Output:
[Minsk,Moscow,Kiev,Ljubljana]

Здесь, чтобы писать меньше кода я соединил joiner3 и joiner2 с помощью метода merge.

Еще в StringJoiner есть метод length — возвращает длину строки и setEmptyValue — т.е. если в joiner ничего не добавлено, то
там хранится введенное значение.

Больше никаких методов в StringJoiner нет.

Также у класса Collectors есть метод joining.
Тут тоже все примитивно(линк на гитхаб https://github.com/VictorSem/ProductJava8/blob/master/ProductJava8/src/main/java/org/example/main/MainClasss.java):

String testJoining = pc.products().map(x->x.getBrand()).distinct().collect(Collectors.joining(",", "[", "]"));
log.info(testJoining);

Output:
[Наши традиции,Ахмад,Беседа,Lipton]

Реклама