第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何從反應(yīng)堆核心中的 Mono<String> 中提取字符串

如何從反應(yīng)堆核心中的 Mono<String> 中提取字符串

一只斗牛犬 2023-05-17 16:02:01
我Mono<String>在反應(yīng)器中有一個對象。我怎樣才能從這個對象中得到一個字符串值?我知道我可以做類似下面的事情:因為Mono<String> userName,我可以,userName.map(System.out::println).但這將直接打印值。我想將這個字符串值存儲到另一個變量中,以便我可以將該變量傳遞給其他一些函數(shù)。我怎樣才能提取這個值?
查看完整描述

2 回答

?
大話西游666

TA貢獻(xiàn)1817條經(jīng)驗 獲得超14個贊

要以最簡單的形式直接回答問題,您可以使用Mono.block().

但你幾乎肯定不應(yīng)該,因為這會阻塞線程,首先破壞了使用反應(yīng)堆的意義。相反,您應(yīng)該調(diào)用subscribe()并提供消費者。當(dāng)發(fā)出一個值時,消費者將被異步調(diào)用Mono,該值作為參數(shù)。

當(dāng)然,沒有什么本質(zhì)上可以阻止您將值分配給一個字段:

mono.subscribe(v?->?this.value?=?v);

...但這在實踐中的用處非常有限,因為您不知道該字段何時會被初始化。

正常的方法是一次性調(diào)用訂閱者中的其他方法:

mono.subscribe(v?->?{
????oneMethodThatNeedsTheValue(v);
????anotherMethodThatNeedsTheValue(v);
});

...或使用Mono.cache()并傳遞它:

class Test {


? ? void useMonoVal(Mono<String> mono) {

? ? ? ? mono.subscribe(s -> System.out.println("I need to see " + s));

? ? }


? ? void anotherMethod(Mono<String> mono) {

? ? ? ? mono.subscribe(s -> System.out.println("I need to talk to " + s));

? ? }


? ? public static void main(String[] args) {

? ? ? ? Mono myMono = Mono.just("Bob").cache();

? ? ? ? Test t = new Test();

? ? ? ? t.useMonoVal(myMono);

? ? ? ? t.anotherMethod(myMono);

? ? }


}

(該cache()方法確保Mono只評估一次,然后為所有未來的訂閱者緩存,這在使用just()工廠時當(dāng)然是無關(guān)緊要的,但只是為了一個完整的例子。)


擴(kuò)展一下,使用反應(yīng)式范式(因此反應(yīng)器,并通過擴(kuò)展它Mono和Flux對象)的全部意義在于它使您能夠以非阻塞方式進(jìn)行編碼,這意味著當(dāng)前的執(zhí)行線程不會“被阻止” " 等待單聲道發(fā)出一個值。


旁注:我不確定它是否與問題直接相關(guān),但你不能這樣做a.map(System.out::println);- 你可能是說a.subscribe(System.out::println);.


查看完整回答
反對 回復(fù) 2023-05-17
?
森林海

TA貢獻(xiàn)2011條經(jīng)驗 獲得超2個贊

在從單聲道對象獲取字符串之前,您必須訂閱

public class MonoT {

? ? ? ? static String x = null;

? ? ? ? public static void main(String[] args) {

? ? ? ? ? ? // TODO Auto-generated method stub

? ? ? ? ? ? Mono<String> username = Mono.just("Naren");

? ? ? ? ? ??

? ? ? ? ? ? username.subscribe(v->{

? ? ? ? ? ? ? ? x = v;

? ? ? ? ? ? });?

? ? ? ? ? ??

? ? ? ? ? ? System.out.println(x);

? ? ? ? }

? ??

? ? }


查看完整回答
反對 回復(fù) 2023-05-17
  • 2 回答
  • 0 關(guān)注
  • 427 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號