如何在大字符串中组合List <Mono <String >>?

时间:2019-06-20 08:59:49

标签: java spring-boot project-reactor

我创建了一个字符串Monos 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 个答案:

答案 0 :(得分:2)

最好的方法是将Monos列表转换为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();