StringBuilder w Stream

0

Elo mam metodę która przyjmuje liste którą przerabiam w streamie za pomocą StringBuildera do jednego stringa oddzielając poszczególne elementy znakiem(plusem). Jest problem gdyż jak to robię w ten sposób dodaje mi na koniec znak jak zrobić żeby tego znaku nie było. Wiem że można to zrobić dużo łatwiej ale chciałbym to zrobić za pomocą StringBuildera i w jednym streamie:

 String getAllCompaniesNamesAsStringUsingStringBuilder() {
        return holdings
                .stream()
                .map(holding -> holding.getCompanies())
                .flatMap(List::stream)
                .map(Company::getName)
                .collect(Collector.of(StringBuilder::new,
                        (stringBuilder, str) -> stringBuilder.append(str).append("+"),
                        StringBuilder::append,
                        StringBuilder::toString));

    }
0

Dodawaj plusa z przodu jedynie co musisz to sprawdzić jest pierwszym element

(stringBuilder, str) -> {if(stringBuilder.toString().equals("")){ return stringBuilder.append(str)}else{return stringBuilder.append("+").append(str)} }
1

StringJoiner

.collect(Collectors.joining("+"));
0
danek napisał(a):

StringJoiner

.collect(Collectors.joining("+"));

Robie sobie zadania ze streamami i tam było żeby użyć stringbuildera wiem że powszechnie używa się stringJoiner ale też da się to robić innymi sposobami więc chciałem poznać inne sposoby i nie rozumiem twojego wtf :) scibi92

0

Ładnie tego nie zrobisz. Albo jak wyżej wychwytujesz ostatni/pierwszy element (ale jakoś średnie to) albo mozesz zrobić reduce

.reduce((s1, s2) -> s1 +"+"+ s2)

No ale wtedy też ładnie nie użyjesz StringBuildera. Generalnie użycie go tu będzie zawsze lekko meh

1 użytkowników online, w tym zalogowanych: 0, gości: 1