Optional類補充

   public static void main(String[] args) {
//        構造方法:
//        Optional.empty(); 構造一個空的Optional對象饶米,Optional里面的value值是null
//        Optional.of(value); 根據(jù)傳入的value值構造一個Optional對象吏垮,如果傳入的值是null,那么會拋出異常
//        Optional.ofNullable(value);根據(jù)傳入的value值構造一個Optional對象,如果傳入的值是null轰胁,那么返回一個空的Optional對象


        //調(diào)用工廠方法創(chuàng)建Optional實例
        Optional<String> name = Optional.of("Sanaulla");
        if(name.isPresent()){//如果Optional內(nèi)的值不為null 那么isPresent()方法返回true
            System.out.println(name.get());//調(diào)用get()方法來返回內(nèi)部的值
        }

        System.out.println("*********************** 1 ********************************");
        Optional<String> empty = Optional.empty();//生成一個空的Optional對象
        System.out.println(empty.isPresent());//返回false
//        System.out.println(empty.get()); 如果對一個空的Optional對象調(diào)用get()方法 那么將拋出異常

        System.out.println("*********************** 2 ********************************");
        //上面的ifPresent方法是空參方案,ifPresent方法也可以接收一個lambda表達式作為參數(shù)
        //然后lambda表達式對Optional的值調(diào)用consumer進行處理。
        name.ifPresent(value -> System.out.println("輸出: " + value) );

        System.out.println("*********************** 3 ********************************");
        //如果有值則將其返回,否則返回輸入的值
        System.out.println(empty.orElse("There is no value present!"));//輸出:There is no value present!
        System.out.println(name.orElse("There is some value!"));//輸出:Sanaulla

        System.out.println("*********************** 4 ********************************");
        //orElseGet與orElse方法類似卖漫,區(qū)別在于orElse傳入的是默認值,orElseGet可以接受一個lambda表達式生成默認值赠群。
        System.out.println(empty.orElseGet(() -> "Default Value"));//輸出:Default Value
        System.out.println(name.orElseGet(() -> "Default Value"));//輸出:Sanaulla

        System.out.println("*********************** 5 ********************************");
        try {
            //orElseThrow與orElse方法類似羊始。與返回默認值不同
            //如果Optional內(nèi)的值為null,那么orElseThrow會拋出lambda表達式或方法生成的異常
            empty.orElseThrow(()-> new RuntimeException("我的異常"));
        } catch (Throwable ex) {
            System.out.println(ex.getMessage());//輸出: No value present in the Optional instance
        }

        System.out.println("*********************** 6 ********************************");
        //map方法用來對Optional實例的值執(zhí)行一系列操作(多個操作)
        Optional<String> hahaName = name.map((value) -> {
            value  = value + " 哈哈";
            value  = value + " 呵呵";
            return  value;
        });
        System.out.println( hahaName.orElse("No value found"));


        //flatMap方法與map方法類似查描,區(qū)別在于前者返回的是Optional內(nèi)的value值突委,或者需要返回一個Optional對象
        System.out.println("*********************** 7 ********************************");
        hahaName = name.flatMap((value) -> {
            value  = value + " 哈哈";
            value  = value + " 呵呵";
            return Optional.of(value);
        });
        System.out.println( hahaName.orElse("No value found"));



        System.out.println("*********************** 8 ********************************");
        //filter方法檢查給定的Option值是否滿足某些條件。如果滿足則返回同一個Option實例冬三,否則返回空Optional匀油。
        Optional<String> longName = name.filter((value) -> value.length() > 6);
        System.out.println(longName.orElse("The name is less than 6 characters"));//輸出Sanaulla

        //另一個例子是Optional值不滿足filter指定的條件。
        Optional<String> anotherName = Optional.of("Sana");
        Optional<String> shortName = anotherName.filter((value) -> value.length() > 6);
        System.out.println(shortName.orElse("The name is less than 6 characters"));//輸出:name長度不足6字符
    }
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末勾笆,一起剝皮案震驚了整個濱河市敌蚜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌窝爪,老刑警劉巖弛车,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蒲每,居然都是意外死亡纷跛,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進店門邀杏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來忽舟,“玉大人,你說我怎么就攤上這事淮阐《T模” “怎么了?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵泣特,是天一觀的道長浩姥。 經(jīng)常有香客問我,道長状您,這世上最難降的妖魔是什么勒叠? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮膏孟,結(jié)果婚禮上眯分,老公的妹妹穿的比我還像新娘。我一直安慰自己柒桑,他們只是感情好弊决,可當我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般飘诗。 火紅的嫁衣襯著肌膚如雪与倡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天昆稿,我揣著相機與錄音纺座,去河邊找鬼。 笑死溉潭,一個胖子當著我的面吹牛净响,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播喳瓣,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼别惦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了夫椭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤氯庆,失蹤者是張志新(化名)和其女友劉穎蹭秋,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體堤撵,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡仁讨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了实昨。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片洞豁。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖荒给,靈堂內(nèi)的尸體忽然破棺而出丈挟,到底是詐尸還是另有隱情,我是刑警寧澤志电,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布曙咽,位于F島的核電站,受9級特大地震影響挑辆,放射性物質(zhì)發(fā)生泄漏例朱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一鱼蝉、第九天 我趴在偏房一處隱蔽的房頂上張望洒嗤。 院中可真熱鬧,春花似錦魁亦、人聲如沸渔隶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽派撕。三九已至婉弹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間终吼,已是汗流浹背镀赌。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留际跪,地道東北人商佛。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像姆打,于是被迫代替她去往敵國和親良姆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,492評論 2 348

推薦閱讀更多精彩內(nèi)容