java - 如何将 List<Mono<String>> 组合成一个大字符串?

标签 java spring-boot project-reactor

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

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

//method body....

StringBuilder builder = new StringBuilder();

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

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

如何让构建器等待单声道?

最佳答案

最好的方法是将 Monos 列表转换为 Flux,然后减少 Flux 以得到一个包含所有子字符串的字符串。然后你就拥有了仍然可以以异步方式使用的 Mono。 (如果你想与项目 react 器保持异步范例,你应该始终使用 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();

关于java - 如何将 List<Mono<String>> 组合成一个大字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56682485/

相关文章:

java - 当我尝试访问我的应用程序起始页时出现意外的登录屏幕

Java react 堆 : How to produce Flux from stdin?

java - 如何在没有嵌套订阅的情况下组合/链接包含不同数据类型的多个 Mono/Flux

java - 如何将控件设置为透明背景

java - 编译 servlet 给出错误信息

java - 摆脱未经检查的分配

java - 如何让 spring boot mvc 理解 observables?

java - Netflix Feign - 通过微服务传播状态和异常

java - 如何修复 JAVA VS 代码中的实现错误, "must implement the inherited abstract class"

spring - 为什么 Spring ReactiveMongoRepository 没有 Mono 的保存方法?