首页 > 解决方案 > 如何组合列表> 在一个大字符串中?

问题描述

我创建了一个 String Monos 列表List<Mono<String>> myList。现在我需要将它们连接成一个大字符串。

当我初始化 aStringBuilder并异步更新它时,可能会返回空行。

//method body....

StringBuilder builder = new StringBuilder();

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

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

我怎样才能让建造者等待单声道?

标签: javaspring-bootproject-reactor

解决方案


最好的方法是将 Monos List 转换为 Flux,然后减少你的 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();

推荐阅读