Создание строки с разделителями из списка

Потребовалось создавать строку с разделителями — запятыми из Collection<String>.

Т.е. у нас есть 

ArrayList<>(Arrays.asList("First string", "Second string", "Third string"));

А нужно получить 

String resultString = "First string, Second string, Third string";

Можно олдскульно пробежаться по списку for-ом и сформировать строку, проверив, что первый элемент должен быть без запятой:

final List<String> stringListToJoin = new ArrayList<>(stringsToJoin);
final StringBuilder resultString = new StringBuilder();
for(int i=0; i < stringsToJoin.size(); i++) {
    if(i != 0) {
        resultString.append(delimiter).append(stringListToJoin.get(i));
    } else {
        resultString.append(stringListToJoin.get(i));
    }
}

Но по мне так бойлерплейта многовато. Пришлось привести Collection к List чтобы получить .get(int index), а такое приведение небезопасно. Не может же быть, чтобы никто ещё этим не озадачился…

Как оказалось — кто-то озадачился! И не один!

Можно воспользоваться прелестями Java 8 и использовать StringJoiner:

final StringJoiner joiner = new StringJoiner(delimiter);
for(final String element : collectionToJoin) {
    joiner.add(element);
}

Кода меньше, лишних приведений типов нет — всё как я люблю. 

Если Java не 8-я, то можно использовать StringUtils.join:

StringUtils.join(collectionToJoin, delimiter);

Ещё короче код, но придётся подтянуть эту самую библиотечку StringUtils. 

Все три примера доступны в моём гитхабе.

Источник знаний — англоязычный  stackoverflow.