StringBuilder w Stream

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:

Kopiuj
 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));

    }
krancki
  • Rejestracja:około 7 lat
  • Ostatnio:ponad 2 lata
  • Lokalizacja:74.7261832, -41.7409518
  • Postów:151
0

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

Kopiuj
(stringBuilder, str) -> {if(stringBuilder.toString().equals("")){ return stringBuilder.append(str)}else{return stringBuilder.append("+").append(str)} }
edytowany 3x, ostatnio: krancki
danek
  • Rejestracja:ponad 10 lat
  • Ostatnio:7 miesięcy
  • Lokalizacja:Poznań
  • Postów:797
1

StringJoiner

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

Spring? Ja tam wole mieć kontrole nad kodem ᕙ(ꔢ)ᕗ
Haste - mała biblioteka do testów z czasem.
edytowany 1x, ostatnio: danek
S9
Dokładnie, w ogóle WTF że ktoś chciał StringBuildera użyć xD A myślałem że mnie nic nie zaskoczy :D
danek
ogólnie sam pomysł nie taki zły, bo wiedział, jak napisać własny collector (zbieracz :P ) i że stringów nie dodaje się + tylko nie znał api
0
danek napisał(a):

StringJoiner

Kopiuj
.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

danek
  • Rejestracja:ponad 10 lat
  • Ostatnio:7 miesięcy
  • Lokalizacja:Poznań
  • Postów:797
0

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

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

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


Spring? Ja tam wole mieć kontrole nad kodem ᕙ(ꔢ)ᕗ
Haste - mała biblioteka do testów z czasem.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.