Как объединить Списокв большой строке? - PullRequest
0 голосов
/ 20 июня 2019

Я создал список строковых монос List<Mono<String>> myList.И теперь мне нужно объединить их в большую строку.

Когда я инициализирую StringBuilder и асинхронно обновляю его, возможно, возвращается пустая строка.

//method body....

StringBuilder builder = new StringBuilder();

myList.forEach {
    mono ->
    mono.map{ str -> builder.append(str)}
}

return builder.toString() //<- is ""

Как мне сделатьСтроитель ждет монос?

1 Ответ

2 голосов
/ 20 июня 2019

Лучший способ - преобразовать Список Моно в Flux, а затем уменьшить ваш поток, чтобы получить одну строку, которая содержит все ваши подстроки.Тогда у вас есть Mono, который вы можете использовать до сих пор в асинхронном режиме.(Вы всегда должны работать над Mono / Flux, если хотите сохранить асинхронную парадигму с проектным реактором)

Пример:

    List<Mono<String>> listOfMonosWithString = Arrays.asList(Mono.just("a"), Mono.just("b"), Mono.just("c"));
    Flux<String> mergedMonos = Flux.fromIterable(listOfMonosWithString)
            .flatMapSequential(Function.identity());

    mergedMonos
            .reduce(String::concat)
            .doOnNext(System.out::println)
            .subscribe();
...