从通量中提取字符串<字符串&>引发类型不匹配:无法从Disposable转换为字符串 [英] To take a String from a Flux<String> throws type mismatch: Cannot convert from Disposable to String

查看:0
本文介绍了从通量中提取字符串<字符串&>引发类型不匹配:无法从Disposable转换为字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

关于this question to take a string from a Mono我想我终于知道如何像这样从String中取出String

Flux<String> rates = controller.getRate(json);          
String myRate = rates.next().subscribe(System.out::print);

但是,这会导致类型不匹配cannot convert from Disposable to String

我哪里搞错了?

澄清一下,它是为了测试--我需要一个内部字符串值。因此,如果我有一个Flux<String>字符串:onetwothree,那么我希望将另一个字符串设置为值one

String s = ...

如果我尝试

String s = rates.doOnNext(System.out::print);

然后我收到type mismatch: cannot convert from Flux<String> to String

如果我尝试

String s = next().flatMap(System.out::print);

然后我收到type mismatch: cannot convert from Mono<Object> to String

推荐答案

我哪里搞错了?

尚不清楚您要实现的目标,但这里可能有几件事:

  • AFlux<String>返回0..n个字符串流,您是否一定只想要它返回的第一个字符串流(这正是next()所做的?)
  • 从发布者获取值实际上有两种选择--可以使用反应链进行异步获取,也可以阻塞线程直到它完成,然后直接获取它。(请注意,如果您阻止,您将失去反应式框架提供给您的所有优势,因此这实际上是您想要做的事情是很少的。)在此示例中,看起来您正在订阅,但也试图阻止,这没有任何意义-您需要选择其中之一。
  • 如果您不想阻止,并且您使用的是像WebFlux这样的反应式框架,那么订阅通常就是框架的工作--您只需将您的反应式调用向上传递,直到最终在您的控制器方法上返回MonoFlux。(只有当您不使用框架,并且自己管理整个反应链+事件循环时,订阅才真正有效。)
  • 如果您不想阻止,但希望确保值一发出就打印出来(称为副作用),则可以使用doOnNext(System.out::print)作为反应链的一部分来实现此目的。

这篇关于从通量中提取字符串&amp;lt;字符串&amp;>引发类型不匹配:无法从Disposable转换为字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆