Я не хочу давать отдельный ответ от hkbharath, который является хорошим ответом, но я хочу привести больше примеров использования потоков Java 8. Collectors.joining () имеет несколько различных перегруженных вариантов.
Допустим, код в его примере:
carList.stream()
.map(Car::toString) // maps Car Object to a value returned by toString method
.collect(Collectors.joining(","));
Даёт вам это: Форд, Хонда, Бьюик
Тогда, если вам не нужен разделитель:
carList.stream()
.map(Car::toString) // maps Car Object to a value returned by toString method
.collect(Collectors.joining());
Вместо этого даст вам: FordHondaBuick
И вот расширенный пример, показывающий, как управлять каждой строкой, изменять разделитель и добавлять префикс и суффикс:
carList.stream()
.map(Car::toString) // maps Car Object to a value returned by toString method
.map(String::toUpperCase) // Transform to upper case
.collect(Collectors.joining("; ", "[", "]"));
Вместо этого дал бы вам: [FORD; HONDA; BUICK]