亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

Java函數式編程(六):Optional

2019-11-26 15:24:31
字體:
來源:轉載
供稿:網友

選取單個元素

直覺來說選取單個元素肯定會比選取多個要簡單得多,不過這里也存在一些問題。我們先看下一般的做法的問題是什么,然后再看下如何用lambda表達式來解決它。

我們先新建一個方法來查找一個以特定字母開頭的元素,然后打印出來。

復制代碼 代碼如下:

public static void pickName(
final List<String> names, final String startingLetter) {
String foundName = null;
for(String name : names) {
if(name.startsWith(startingLetter)) {
foundName = name;
break;
}
}

這個方法簡直跟剛過去的垃圾車一樣臭不可聞。我們先是新建了一個foundName的變量,然后初始化成null――這個就是惡臭之源。我們不得不檢查是否為空,不然的話就會拋出一個NullPointerException或者一個錯誤響應。我們還用了一個外部迭代器來循環列表,如果找到了想要的元素之后還得跳出這個循環,這又加重了原來的臭味:基本類型偏執,命令式風格,可變性,全齊活了。一旦退出循環后,我們還得先檢查下結果,然后才能進行打印。這么點任務居然寫了這么長的代碼。

我們來重新分析下這個問題。我們只是希望能選出第一個匹配的元素,并且能安全的處理不存在這樣一個元素的情況。我們來用lambda表達式重寫一下這個pickName方法。

復制代碼 代碼如下:

public static void pickName(
final List<String> names, final String startingLetter) {
final Optional<String> foundName =
names.stream()
.filter(name ->name.startsWith(startingLetter))
.findFirst();
System.out.println(String.format("A name starting with %s: %s",
startingLetter, foundName.orElse("No name found")));
}

JDK里面一些強大的功能使得這段代碼更得非常簡潔。首先我們用filter方法獲取了所有滿足條件的元素,然后用了Stream類的findFirst方法選取出了返回集合的第一個元素。這個方法返回的是一個Optional對象,這就是Java里面官方認證的null變量的除臭劑。

Optional類非常有用,你不用管結果是不是存在。它使得我們免受空指針異常的煩惱,并且更明確的指明了沒有結果也是一種可能的結果。通過isPresent()方法我們可以知道結果是不是存在,想獲取結果值的話可以使用get()方法。我們還可以使用(這個方法名能讓你震驚)orElse方法給它設置一個默認值,就像前面代碼里的那樣。

我們用之前一直在用的friends集合來驗證下我們這個pickName方法。

復制代碼 代碼如下:

pickName(friends, "N");
pickName(friends, "Z");

這段代碼選取出第一個匹配的元素,如果沒找到,打印出一個友好的提示信息。
復制代碼 代碼如下:

A name starting with N: Nate
A name starting with Z: No name found

findFirst()方法和Optinal類的結合使用減少了我們的代碼量,并且看起來感覺還不錯。不過Optional類的功能遠不止這些。比如說,除了當對象不存在的時候能提供一個默認值外,如果結果存在的話還可以用它來運行一段代碼,或者一個lambda表達式,像這樣:
復制代碼 代碼如下:

foundName.ifPresent(name -> System.out.println("Hello " + name));

跟命令式的選取第一個匹配名字的代碼比起來,流式的優雅的函數式風格看真來更棒一些。不過這個調用流的版本里是不是做的事情有點太多了(譯注:先選出了所有匹配的再返回第一項)?當然不是,這些方法非常智能,它們可以按需工作(在后面113頁的Stream的惰性求值中我們會深入探討這點)。

選取單個元素的例子展示了JDK庫更多強大的功能,下面我們來看下lambda表達式如何根據一個集合,來求出一個想要的值。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产午夜精品一区二区三区| 精品免费在线视频| 精品国内亚洲在观看18黄| 亚洲天堂av高清| 91久久国产综合久久91精品网站| 欧美高清视频在线| 日韩国产精品亚洲а∨天堂免| 欧美日韩性生活视频| 热草久综合在线| 日韩中文字幕视频| 欧美一性一乱一交一视频| 欧美在线一区二区视频| 97香蕉超级碰碰久久免费软件| 国产精品成熟老女人| 亚洲国产精品电影在线观看| 日韩国产欧美区| 亚洲精品www久久久| 亚洲美女自拍视频| 国产丝袜一区二区三区| 国产成人精品av在线| 91亚洲精品久久久久久久久久久久| 亚洲伦理中文字幕| 中文字幕亚洲综合久久| 美日韩精品视频免费看| 色先锋资源久久综合5566| 亚洲午夜性刺激影院| 九九久久精品一区| 日韩欧美国产激情| 久久五月天综合| 亚洲jizzjizz日本少妇| 日韩国产中文字幕| 日韩成人中文电影| 亚洲人成电影网站色| 91精品国产色综合久久不卡98| 亚洲最大av网站| 亚洲国产精彩中文乱码av| 欧美性生交大片免费| 亚洲最大成人网色| 亚洲第一av网| 国产丝袜精品视频| 亚洲成色www8888| 亚洲欧洲一区二区三区在线观看| 亚洲一区久久久| 久久大大胆人体| 日韩成人激情视频| 韩国视频理论视频久久| 亚洲性xxxx| 精品亚洲永久免费精品| 国产主播喷水一区二区| 亚洲va欧美va国产综合久久| 久久九九亚洲综合| 国产免费观看久久黄| 久久久精品一区二区| 日韩在线视频免费观看高清中文| 国产一区二区三区视频在线观看| 92版电视剧仙鹤神针在线观看| 最近2019年好看中文字幕视频| 成人高h视频在线| 久久精品电影网| 欧美午夜性色大片在线观看| 成人情趣片在线观看免费| 日韩欧美一区二区三区| 国产精品欧美风情| 国产精品美女主播| 国产精品成人久久久久| 青青草原成人在线视频| 亚洲国产精品系列| 久久久黄色av| 亚洲午夜精品视频| 一区二区三区四区视频| www.久久色.com| 亚洲人成网在线播放| 欧美肥臀大乳一区二区免费视频| 国产精品jizz在线观看麻豆| 亚洲a∨日韩av高清在线观看| 91高清免费视频| 欧美成人三级视频网站| 亚洲国产欧美一区二区三区同亚洲| 亚洲嫩模很污视频| 国产一区二区视频在线观看| 91精品国产99久久久久久| 日韩精品丝袜在线| 日韩免费av一区二区| 国色天香2019中文字幕在线观看| 这里只有精品在线播放| 91亚洲精品久久久久久久久久久久| 日韩欧美在线视频| 日韩理论片久久| 美女精品视频一区| 久久久久国产精品一区| 97精品久久久中文字幕免费| 久久久久久久久久久91| 色妞一区二区三区| 成人a视频在线观看| 欧美激情精品久久久| 国产精品一区二区三区久久久| 中文字幕精品一区久久久久| 国产精品美女免费视频| 欧美影院久久久| 日韩国产激情在线| 日韩精品在线视频| 久久深夜福利免费观看| 性色av一区二区咪爱| 国产精品h片在线播放| 2018日韩中文字幕| 国语自产精品视频在免费| 欧美巨大黑人极品精男| 久久久国产一区二区三区| 欧美电影在线播放| 亚洲精品日产aⅴ| 亚洲美女精品久久| 国产99久久精品一区二区| 91精品国产91久久久久福利| 欧美另类第一页| 久久久国产一区二区| 91最新国产视频| xx视频.9999.com| 国产精品海角社区在线观看| 久久久久久久久综合| 91国产精品电影| 成人午夜一级二级三级| 欧美性猛交xxxxx水多| 欧美极品欧美精品欧美视频| 欧美另类老肥妇| 亚洲人成亚洲人成在线观看| 91亚洲永久免费精品| 免费不卡在线观看av| 中文字幕亚洲无线码在线一区| 日韩成人网免费视频| 国产精品久久久久久亚洲影视| 亚洲aaa激情| 精品福利樱桃av导航| 日韩欧美亚洲成人| 欧美一级高清免费播放| 91老司机在线| 亚洲毛片在线看| 亚洲最大av网| 国产精品高清在线观看| 欧美在线视频免费| 日韩高清a**址| 日韩在线视频免费观看高清中文| 色偷偷噜噜噜亚洲男人| 91啪国产在线| 日韩激情在线视频| 国产亚洲视频在线| 国产亚洲一区二区在线| 国产一区二区香蕉| 久久精品成人动漫| 欧美激情xxxxx| 国产精品你懂得| 亚洲丝袜av一区| 亚洲最大福利视频网站| 青青草99啪国产免费| 国产日韩欧美91| 4k岛国日韩精品**专区| 国产一区二区欧美日韩| 欧美成人手机在线| 精品av在线播放| 国产视频精品一区二区三区| 欧美成人精品h版在线观看| 国产精品久久久久7777婷婷| 国产精品久久久久久超碰| 91香蕉亚洲精品| 欧美黑人巨大精品一区二区|