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

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

在 .map() 中返回 null 與 Reactor 中的 .flatMap() 返回 null

在 .map() 中返回 null 與 Reactor 中的 .flatMap() 返回 null

三國紛爭 2023-09-20 15:51:42
以下代碼有效:// emitting employees....flatMap(employee -> {    boolean isAlive = employee.isAlive();    return Mono.just(isAlive)            .flatMap(myBoolean -> {                if (myBoolean) {                    return Mono.empty();                }                 else {                    return Mono.just(employee);                }            });})但我想知道為什么我不能.map在處理時使用myBoolean(NullPointerException 當它返回 null 時)            .map(myBoolean -> {                if (myBoolean) {                    return null;                }                 else {                    return employee;                }            });map我相信我對兩者缺乏一些了解flatMapmap在Java 8流中,我理解和之間的區(qū)別flatMap(對于收到的每個項目,map發(fā)出 1,flatMap發(fā)出 N)但在 Reactor 中我有點困惑。我認為 和map都會為收到的每個元素flatMap發(fā)出 1 個項目,區(qū)別在于 和 會map暫時不發(fā)出它。要發(fā)出 N 個項目,我會使用.MonoflatMapflatMapMany預先感謝您的解釋!
查看完整描述

5 回答

?
牧羊人nacy

TA貢獻1862條經(jīng)驗 獲得超7個贊

map:通過對其應用同步函數(shù)來轉(zhuǎn)換此 Mono 發(fā)出的項目。

flatMap:異步轉(zhuǎn)換此 Mono 發(fā)出的項,返回另一個 Mono 發(fā)出的值。

在所有情況下,您都無法返回null。這是設計上禁止的。map和之間的主要區(qū)別flatMap是第二個返回 Mono。這允許對數(shù)據(jù)庫、Web 服務等執(zhí)行異步調(diào)用。

因此flatMap應該用于執(zhí)行其他異步操作。如果你返回一個Mono.just(...).?Mono.empty()我們可能會像您一樣使用 flatMap 在某些情況下返回。這是一種常見的模式。根據(jù)您的用例,您可能更喜歡使用filtermapNotNull。

這里有一個替代代碼,用于發(fā)出帶有條件的新對象:

? ? ? .handle(myBoolean, sink -> {

? ? ? ? ? ? if (!myBoolean) {

? ? ? ? ? ? ? ? sink.next(employee);

? ? ? ? ? ? } // else the Mono would be empty ...

? ? ? ? });


查看完整回答
反對 回復 2023-09-20
?
哈士奇WWW

TA貢獻1799條經(jīng)驗 獲得超6個贊

這是因為flatMap將嘗試將內(nèi)部單聲道展開到外部單聲道中。這意味著該值將為空,但會有一個類型。

另一方面map將變換Mono<A>Mono<B>。null 沒有類型,這就是為什么你不能這樣做。


查看完整回答
反對 回復 2023-09-20
?
守候你守候我

TA貢獻1802條經(jīng)驗 獲得超10個贊

使用map方法映射內(nèi)容時Mono,不能提供null作為映射結(jié)果,因為這會導致 java.lang.NullPointerException: The mapper returned a null value.訂閱期間出現(xiàn)錯誤。

可以Mono為空,也可以包含有效的對象。

根據(jù)Project Reactor的源代碼,a的內(nèi)容Mono不能為null。

因此,在這種情況下,有效的解決方案是使用flatMap.


查看完整回答
反對 回復 2023-09-20
?
幕布斯6054654

TA貢獻1876條經(jīng)驗 獲得超7個贊

流中的任何位置null都會拋出NPE: Mapper returned a null value. 不管map還是flatMap。這是設計使然。

關于 的簡短說明flatMap:它急切地訂閱其內(nèi)部流(在您的情況下為Mono.empty()Mono.just(..)),并在內(nèi)部流不斷發(fā)出元素時進行動態(tài)合并。這就是為什么您可以通過 保證訂單flatMap。


查看完整回答
反對 回復 2023-09-20
?
莫回無

TA貢獻1865條經(jīng)驗 獲得超7個贊

為了避免您的情況出現(xiàn) NullPointerException,您可以將 map 更改為 mapNotNull:


        .mapNotNull(myBoolean -> {

            if (myBoolean) {

                return null;

            } 

            else {

                return employee;

            }

        }); 


查看完整回答
反對 回復 2023-09-20
  • 5 回答
  • 0 關注
  • 279 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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