国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

Monad in Java(

2021-11-27 11:08 作者:友紀(jì)V-入OP  | 我要投稿


這種代碼無論是可讀性還是性能都是災(zāi)難,但是有趣 (以及研究價(jià)值)最重要!Just for fun :)


對Optional,其有兩個(gè)操作是主要的——map和flatmap。這兩個(gè)操作都是在當(dāng)前的值不為空的情況下才會(huì)執(zhí)行的。其中map對值普通的映射,而flatmap則將返回的Optional替換為當(dāng)前的Optional。如果讀者熟悉js的promise,可以認(rèn)為then方法同時(shí)包含了map和flatmap。

根據(jù)flatmap的特性,在Optional上,可以認(rèn)為其用于連接兩個(gè)可能“失敗”的操作——比如上面的getMaybe。

比如你要從身份證號獲得銀行卡號,再從銀行卡號獲得對應(yīng)的余額,假設(shè)兩次操作都是從一個(gè)哈希表中獲取,則每次都可能取得空值,即“失敗”,即這個(gè)身份證號沒有對應(yīng)的銀行卡號,這個(gè)銀行卡號沒有對應(yīng)的余額(?直接理解成掛失,凍結(jié)之類的情況吧w),這時(shí)候你就可以使用flatmap——在代碼邏輯中不需要關(guān)心兩個(gè)操作是否失敗便可以將其相連接。

從函數(shù)類型上來說會(huì)更加清晰,比如通過身份證號獲得銀行卡號,可以認(rèn)為這個(gè)操作的類型簽名為IdCard -> Optional<CreditCard>,通過銀行卡號獲得余額的操作為CreditCard -> Optional<Money>,這時(shí)候使用flatmap,我們就能夠組合這兩個(gè)操作,得到IdCard -> Optional<Money>,BINGO!

但是上面的代碼同樣存在一個(gè)問題——你容易預(yù)見組合后的操作的返回值是什么:如果身份證號和銀行卡號均存在,則返回余額;若其中一個(gè)不存在,則返回空值。但預(yù)見這操作過程中會(huì)輸出什么,或者說,這操作會(huì)對外界產(chǎn)生什么影響則是一個(gè)復(fù)雜問題。于是最簡單的解決方案是:在操作中不要引發(fā)副作用,不要進(jìn)行輸出等操作。操作要盡量"純"才好!

Monad in Java(的評論 (共 條)

分享到微博請遵守國家法律
浮梁县| 满洲里市| 左权县| 益阳市| 元江| 宜昌市| 延川县| 贵州省| 台南市| 六枝特区| 且末县| 灵山县| 米易县| 区。| 阳东县| 理塘县| 华蓥市| 天水市| 大埔县| 台前县| 建阳市| 安徽省| 常熟市| 新建县| 宁陵县| 安义县| 泰和县| 盘锦市| 高州市| 修武县| 商都县| 郧西县| 富锦市| 城步| 遂川县| 娄烦县| 万安县| 当涂县| 稷山县| 高淳县| 永仁县|