我创建了一个字符串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 ""
如何让建造者等待单体作品?
答案 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();