精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何正確使用Java8的Optional機制

開發(fā) 后端
Java8帶來的函數(shù)式編程特性對于習慣命令式編程的程序員來說還是有一定的障礙的,我們只有深入了解這些機制的方方面面才能運用自如。

Java8帶來的函數(shù)式編程特性對于習慣命令式編程的程序員來說還是有一定的障礙的,我們只有深入了解這些機制的方方面面才能運用自如。Null的處理在JAVA編程中是出了try catch之外的另一個頭疼的問題,需要大量的非空判斷模板代碼,程序邏輯嵌套層次太深。尤其是對集合的使用,需要層層判空。

首先來看下Optional類的結(jié)構(gòu)圖:

 

1,Optional擁有兩個字段

  1. /** 
  2.      * Common instance for {@code empty()}. 
  3.      */ 
  4.     private static final Optional<?> EMPTY = new Optional<>(); 
  5.  
  6.     /** 
  7.      * If non-null, the value; if null, indicates no value is present 
  8.      */ 
  9.     private final T value;  

1)EMPTY持有某個類型的空值結(jié)構(gòu),調(diào)用empty()返回的即是該實例

  1. public static<T> Optional<T> empty() { 
  2.         @SuppressWarnings("unchecked"
  3.         Optional<T> t = (Optional<T>) EMPTY; 
  4.         return t; 
  5.     }  

2)T vaule是該結(jié)構(gòu)的持有的值

2,Optional的方法

1)構(gòu)造函數(shù)

  1. private Optional() { 
  2.         this.value = null
  3.     } 
  4. private Optional(T value) { 
  5.         this.value = Objects.requireNonNull(value); 
  6.     }  

Optional(T value)如果vaule為null就會拋出NullPointer異常,所以對于使用的場景這兩個構(gòu)造器都適用.

2)生成Optional對象

有兩個方法 of(T)和ofNullable(T)

  1. public static <T> Optional<T> of(T value) { 
  2.         return new Optional<>(value); 
  3.     } 
  4.  
  5.  public static <T> Optional<T> ofNullable(T value) { 
  6.         return value == null ? empty() : of(value); 
  7.     }  

of是直接調(diào)用的構(gòu)造函數(shù),因此如果T為null則會拋出空指針異常

ofNullable對null進行了處理,會返回EMPTY的實例,因此不會出現(xiàn)異常

所以只有對于明確不會為null的對象才能直接使用of

3)獲取Optional對象的值

需要擯棄的使用方式

if(value.isPresent){

....

}else{

T t = value.get();

}

這種使用方式無異于傳統(tǒng)的if(vaule != null)

正確的使用姿勢:

orElse:如果值為空則返回指定的值

orElseGet:如果值為空則調(diào)用指定的方法返回

orElseThrow:如果值為空則直接拋出異常

  1. public T orElse(T other) { 
  2.         return value != null ? value : other; 
  3.     } 
  4.  
  5.     public T orElseGet(Supplier<? extends T> other) { 
  6.         return value != null ? value : other.get(); 
  7.     } 
  8.  
  9.     public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X { 
  10.         if (value != null) { 
  11.             return value; 
  12.         } else { 
  13.             throw exceptionSupplier.get(); 
  14.         } 
  15.     }  

一般我們使用orElse來取值,如果不存在返回默認值.

4)Optional的中間處理

filter,map,flatMap,這幾個操作跟Stream的處理類似,只是要注意flatMap處理必須手動指定返回類型為Optional<U>,而map會自動將返回值包裝成Optional.舉個栗子,我們有商品很訂單的結(jié)構(gòu):

  1. package model; 
  2.  
  3. import java.util.List; 
  4.  
  5. /** 
  6.  * @auth gongxufan 
  7.  * @Date 2017/10/23 
  8.  **/ 
  9. public class Goods { 
  10.     private String goodsName; 
  11.     private double price; 
  12.     private List<Order> orderList; 
  13.  
  14.     public String getGoodsName() { 
  15.         return goodsName; 
  16.     } 
  17.  
  18.     public void setGoodsName(String goodsName) { 
  19.         this.goodsName = goodsName; 
  20.     } 
  21.  
  22.     public double getPrice() { 
  23.         return price; 
  24.     } 
  25.  
  26.     public void setPrice(double price) { 
  27.         this.price = price; 
  28.     } 
  29.  
  30.     public List<Order> getOrderList() { 
  31.         return orderList; 
  32.     } 
  33.  
  34.     public void setOrderList(List<Order> orderList) { 
  35.         this.orderList = orderList; 
  36.     } 
  37.  
  1. package model; 
  2.  
  3. import java.time.LocalDateTime; 
  4.  
  5. /** 
  6.  * @auth gongxufan 
  7.  * @Date 2017/10/23 
  8.  **/ 
  9. public class Order { 
  10.     private LocalDateTime createTime; 
  11.     private LocalDateTime finishTime; 
  12.     private String orderName; 
  13.     private String orderUser; 
  14.  
  15.     public LocalDateTime getCreateTime() { 
  16.         return createTime; 
  17.     } 
  18.  
  19.     public void setCreateTime(LocalDateTime createTime) { 
  20.         this.createTime = createTime; 
  21.     } 
  22.  
  23.     public LocalDateTime getFinishTime() { 
  24.         return finishTime; 
  25.     } 
  26.  
  27.     public void setFinishTime(LocalDateTime finishTime) { 
  28.         this.finishTime = finishTime; 
  29.     } 
  30.  
  31.     public String getOrderName() { 
  32.         return orderName; 
  33.     } 
  34.  
  35.     public void setOrderName(String orderName) { 
  36.         this.orderName = orderName; 
  37.     } 
  38.  
  39.     public String getOrderUser() { 
  40.         return orderUser; 
  41.     } 
  42.  
  43.     public void setOrderUser(String orderUser) { 
  44.         this.orderUser = orderUser; 
  45.     } 
  46.  

現(xiàn)在我有一個goodsOptional

  1. Optional<Goods> goodsOptional = Optional.ofNullable(new Goods()); 

現(xiàn)在我需要獲取goodsOptional里邊的orderList,應(yīng)該這樣你操作

  1. goodsOptional.flatMap(g ->Optional.ofNullable(g.getOrderList())).orElse(Collections.emptyList()) 

flatMap里頭返回的是Optional<List<Order>>,然后我們再使用orElse進行unwraap.因此faltMap可以解引用更深層次的的對象鏈.

5)檢測Optional并執(zhí)行動作

  1. public void ifPresent(Consumer<? super T> consumer) { 
  2.         if (value != null
  3.             consumer.accept(value); 
  4.     }  

這是一個終端操作,不像上邊的可以進行鏈式操作.在Optional實例使用直接調(diào)用,如果value存在則會調(diào)用指定的消費方法.舉個栗子:

  1. Goods goods = new Goods(); 
  2.  Optional<Goods> goodsOptional = Optional.ofNullable(goods); 
  3.  List<Order> orderList = new ArrayList<>(); 
  4.  goods.setOrderList(orderList); 
  5.  goodsOptional.flatMap(g ->Optional.ofNullable(g.getOrderList())).ifPresent((v)-> System.out.println(v));  

至此該類的方法和使用介紹都差不多了,最后總結(jié)需要注意的地方:

1)Optional應(yīng)該只用處理返回值,而不應(yīng)該作為類的字段或者方法的參數(shù).因為這樣會造成額外的復(fù)雜度.

2)使用Option應(yīng)該避免直接適應(yīng)構(gòu)造器和get,而應(yīng)該使用isElse的系列方法避免頻繁的非空判斷

3)map和flatMap要注意區(qū)分使用場景 

責任編輯:龐桂玉 來源: 吹著空調(diào)蓋被子的博客
相關(guān)推薦

2023-01-09 11:45:21

Java8Optional系統(tǒng)

2021-01-04 08:39:26

JAVA8OptionalNPE

2024-01-31 08:53:01

Java數(shù)組代碼

2020-12-01 07:18:35

Java8日期時間

2015-03-31 14:15:12

JavaJava事件通知

2023-05-12 07:40:01

Java8API工具

2022-07-11 10:51:25

Java 8OptionalNPE

2019-11-14 16:23:07

MySQL索引數(shù)據(jù)庫

2010-02-03 15:40:37

Python函數(shù)

2017-09-23 15:28:32

JavaOptional方法

2025-07-18 13:00:33

Java8并行流線程

2017-10-25 11:05:14

Java

2020-07-24 08:11:04

Java8ava5語言

2014-04-11 12:49:00

Java8Java8教程

2020-12-29 05:34:48

Scrapy網(wǎng)頁源代碼

2018-12-05 09:00:00

RedisRedis Strea數(shù)據(jù)庫

2022-09-07 08:58:58

Node.js框架

2015-09-30 09:34:09

java8字母序列

2014-04-15 09:40:04

Java8stream

2021-08-13 12:53:42

StringBuildStringJoineJava
點贊
收藏

51CTO技術(shù)棧公眾號

国产欧美一区二区精品久久久| 欧美xxxx少妇| 国产一区二区在线观看免费| 久久久久国色av免费观看性色| 中文字幕乱视频| 中文字幕这里只有精品| 亚洲国产精品成人综合| 999热视频| 久久久久久无码精品大片| 亚洲精品午夜av福利久久蜜桃| 亚洲国产精品免费| 亚洲va综合va国产va中文| 91桃色在线| 国产精品私人自拍| 国产一区二区三区奇米久涩 | 老牛影视av牛牛影视av| 日本色综合中文字幕| 欧美激情一区二区三区久久久 | 最新天堂在线视频| 91视频欧美| 自拍偷拍亚洲激情| 日韩午夜视频在线观看| 日韩一区二区三区在线观看视频| 美日韩一区二区| 欧美一二三视频| 黄页网站免费观看| 欧美成人精品一区二区三区在线看| 亚洲国产精品免费| 国产精品二区视频| 亚洲成a人片777777久久| 日本高清视频一区二区| 久久久亚洲精品无码| 91在线中字| 中文字幕一区二区三区四区| 看高清中日韩色视频| 丰满人妻av一区二区三区| 激情五月播播久久久精品| 国产精品jvid在线观看蜜臀| 国产成人亚洲欧洲在线| 亚洲三级影院| 国内精品久久久久| 国产小视频在线观看免费| 婷婷综合视频| www.日韩免费| 国产精品成人69xxx免费视频| 日韩激情在线| 中文字幕在线看视频国产欧美在线看完整| 久久丫精品国产亚洲av不卡| 精品资源在线| 亚洲精品短视频| 国产黄色三级网站| 国产伦理久久久久久妇女| 精品国产亚洲在线| 毛茸茸free性熟hd| 国产主播性色av福利精品一区| 精品久久一区二区| 永久免费未满蜜桃| 久久国产精品免费精品3p| 亚洲成人教育av| av网页在线观看| 亚洲婷婷影院| 亚洲深夜福利在线| 一级特黄曰皮片视频| 日韩系列欧美系列| 久热精品视频在线观看| 免费麻豆国产一区二区三区四区| 韩国自拍一区| 欧美在线www| 成人小视频在线播放| 欧美a级理论片| 成人做爽爽免费视频| 国产xxxxxx| 成人av网址在线| 欧美日韩一区二区三区在线视频| yw在线观看| 综合亚洲深深色噜噜狠狠网站| 强开小嫩苞一区二区三区网站| 日本孕妇大胆孕交无码| 欧美日韩中文字幕| 欧美性猛交xxx乱久交| 亚洲影视资源| 亚洲福利在线播放| 国产手机在线观看| 在线观看国产精品入口| 91po在线观看91精品国产性色| 波多野结衣视频免费观看| 久久91精品国产91久久小草| 国产久一道中文一区| 黄色在线免费观看大全| 亚洲欧美一区二区视频| 波多野结衣综合网| 91国拍精品国产粉嫩亚洲一区| 制服视频三区第一页精品| 久久久久无码国产精品一区李宗瑞 | 在线亚洲精品福利网址导航| 日韩a一级欧美一级| 女人抽搐喷水高潮国产精品| 中文字幕精品av| 国产一级免费观看| 日韩二区在线观看| 国产精品一 二 三| 日本三级视频在线播放| 精品成人久久av| 手机在线视频一区| 久久av影视| 欧美激情国产高清| 中文字幕一区二区免费| 成人动漫视频在线| 一级做a爰片久久| 亚洲校园激情春色| 日韩欧美中文字幕制服| 久久久久久成人网| 欧美专区在线| 国产精品久久久久久久小唯西川| 日本中文字幕在线播放| 色综合色综合色综合| 成人在线观看一区二区| 亚欧美无遮挡hd高清在线视频| 日本免费一区二区三区视频观看 | 成人涩涩免费视频| 一区二区三区四区五区视频| 蜜桃麻豆av在线| 日韩精品一区二区三区四区| 久久成人小视频| 老司机午夜免费精品视频| 国产亚洲精品久久飘花| 精品麻豆一区二区三区| 精品视频999| 受虐m奴xxx在线观看| 国产伦理一区| 狠狠色综合色区| 黄色在线看片| 日韩精品一区二区三区中文精品 | 欧美日韩精品在线| 亚洲av人人澡人人爽人人夜夜| 综合激情婷婷| 亚洲va久久久噜噜噜久久天堂| 91社区在线| 欧美影院一区二区三区| 亚洲午夜福利在线观看| 亚洲国产电影| 精品视频免费观看| 美女的胸无遮挡在线观看| 日韩成人在线视频网站| 国产在线精品观看| 成人av免费观看| 少妇人妻无码专区视频| 狼人天天伊人久久| 8090成年在线看片午夜| 日韩二区三区| 日韩欧亚中文在线| 欧美人与性囗牲恔配| 日韩不卡一二三区| 亚洲自拍三区| 精品国产第一国产综合精品| 欧美理论片在线观看| 亚洲成人一级片| 五月天亚洲婷婷| 黄色国产在线观看| 日韩成人精品在线观看| 一区二区视频在线观看| 午夜久久av| 97福利一区二区| 免费在线黄色影片| 欧美性猛交xxxx乱大交退制版| 国产极品视频在线观看| 狠狠久久亚洲欧美| 久久久性生活视频| 免费观看不卡av| 国产在线久久久| 少妇视频在线| 日韩精品在线视频美女| 在线观看亚洲国产| 一区二区三区中文字幕| 国产精品无码专区| 蜜桃一区二区三区在线观看| 99中文字幕在线观看| 久久a爱视频| 国产精品视频色| 午夜小视频在线观看| 日韩精品小视频| 在线免费av网| 一区二区三区精品在线观看| 国产ts丝袜人妖系列视频| 美女高潮久久久| 国产精彩视频一区二区| 大色综合视频网站在线播放| 亚洲永久在线观看| 不卡av影片| 久久成人综合视频| 欧美老女人性开放| 欧美一区二区高清| 性色av免费观看| 一区二区三区视频在线观看| 尤物视频最新网址| 国产成人综合自拍| 免费男同深夜夜行网站| 国一区二区在线观看| 亚洲欧洲另类精品久久综合| 红杏视频成人| 91久久精品国产91性色| 中文字幕资源网在线观看免费| 久久精品国产电影| 毛片在线免费| 精品国产3级a| 亚洲在线视频播放| 欧美性猛交xxxx黑人| 久草视频免费在线播放| 国产精品二三区| 亚洲成人网在线播放| 国产99久久久久| 99九九99九九九99九他书对| 玖玖视频精品| 黄色一级视频片| 国产精品v亚洲精品v日韩精品| 亚洲国产日韩欧美| 亚洲欧美tv| 国产精品久久久一区二区三区| 自拍偷拍欧美日韩| 国产精品久久久久久久一区探花 | 欧美视频一二三区| 久久99国产综合精品免费| 亚洲尤物视频在线| 亚洲xxxx3d动漫| 国产精品麻豆一区二区| 永久免费看mv网站入口78| www.激情成人| 日韩女优在线视频| 国产麻豆精品theporn| 免费av不卡在线| 蜜臀久久久久久久| 男人搞女人网站| 丝袜美腿亚洲综合| 男人天堂网视频| 在线视频免费在线观看一区二区| 波多野结衣av一区二区全免费观看| 婷婷综合亚洲| 加勒比海盗1在线观看免费国语版| 久久社区一区| 中文一区一区三区免费| 日韩夫妻性生活xx| 亚洲精品二区| 国产精品麻豆久久| 99精品视频网站| 91精品国偷自产在线电影| youjizz.com亚洲| 亚洲字幕久久| 日本a级片在线观看| 午夜日韩激情| av在线免费观看国产| 在线看片不卡| 日韩中文字幕在线免费| 国产日韩精品视频一区二区三区| 国产极品粉嫩福利姬萌白酱| 久久成人国产| 成人亚洲精品777777大片| 久久精品久久精品| 亚洲色图偷拍视频| 国产成人免费xxxxxxxx| 五月天激情小说| 91丨porny丨在线| 久久久久久久毛片| 中文字幕精品一区| 老熟妇高潮一区二区三区| 一区二区久久久| 久久久国产精品成人免费| 色天天综合色天天久久| 亚洲图片中文字幕| 91精品福利在线一区二区三区 | 91精品国产亚洲| 欧美大胆成人| 91牛牛免费视频| 久久久精品国产**网站| 欧美日韩精品免费观看视一区二区| 精品国产一区二区三区香蕉沈先生 | 午夜影院欧美| 久草免费福利在线| 久久婷婷麻豆| 精品国产鲁一鲁一区二区三区| 不卡一卡二卡三乱码免费网站| 97超碰在线资源| 亚洲欧美日韩电影| 久久久精品免费看| 555夜色666亚洲国产免| 无码精品黑人一区二区三区| 中文字幕在线国产精品| gogo久久| 国产中文字幕91| 老牛国内精品亚洲成av人片| 亚洲欧美日韩不卡一区二区三区| 欧美日韩专区| 中文字幕亚洲乱码| 成人黄色a**站在线观看| 国产黄色大片免费看| 亚洲一区二区在线免费看| 中文字字幕在线中文乱码| 精品少妇一区二区三区日产乱码| 国产在线91| 久久久久久久av| 久久人体av| 欧美国产综合视频| 欧美体内she精视频在线观看| 亚洲xxxx2d动漫1| 99久久综合狠狠综合久久| 日本一二三区在线观看| 色婷婷av久久久久久久| 狠狠躁夜夜躁av无码中文幕| 最新国产成人av网站网址麻豆| 国产污视频在线播放| 亚洲自拍另类欧美丝袜| 欧美在线电影| 欧美性大战久久久久xxx| 国产精品综合久久| 久久久久麻豆v国产| 色综合中文字幕国产| 人人妻人人澡人人爽久久av| 超在线视频97| 日韩毛片免费看| 日本高清视频一区二区三区| 亚洲三级国产| 亚洲欧洲国产视频| 亚洲欧美aⅴ...| 国产精品久久久久久久久毛片| 亚洲视频精品在线| 欧美艳星kaydenkross| 国内一区二区在线视频观看| 欧美激情91| 久久出品必属精品| 国产精品久久久久影院色老大| 黄色片视频免费| 亚洲区在线播放| 在线天堂新版最新版在线8| 国产伦精品一区二区三区高清版 | 九九九久久久久久| 精品三级久久久| 福利在线小视频| 国产精品一区二区免费不卡| 粉嫩av性色av蜜臀av网站| 7777精品伊人久久久大香线蕉的| 天堂资源在线中文| 国产日韩一区在线| 99久久夜色精品国产亚洲96| 最新av免费在线观看| 中文字幕一区二区三区视频| 国产精品无码免费播放| 毛片精品免费在线观看| 亚洲午夜免费| 人妻无码久久一区二区三区免费| 成人午夜电影网站| 日韩精品成人在线| 亚洲精品ady| 成人免费看黄| 亚洲欧美精品在线观看| 精品亚洲aⅴ乱码一区二区三区| 亚洲综合久久av一区二区三区| 91精品国产欧美日韩| 人妖欧美1区| 国内精品一区二区| 日韩中文字幕1| 天天色天天综合| 日韩美女一区二区三区四区| 啊啊啊久久久| 日韩欧美第二区在线观看| 久草热8精品视频在线观看| 久久久久亚洲AV成人| 亚洲成人精品久久久| 免费看av不卡| 爱爱爱视频网站| 懂色av一区二区在线播放| av大全在线观看| 少妇高潮 亚洲精品| 日韩高清一区| 国内外成人激情视频| 国产精品久久久久久久浪潮网站| 国产精品自偷自拍| 国内精久久久久久久久久人| av在线不卡顿| 伊人av在线播放| 日韩人体视频一二区| 久久久久久国产精品免费无遮挡| 丁香五月网久久综合| 天堂av在线一区| 久久黄色小视频| 国产亚洲综合久久| 亚洲精品在线a| 男人天堂成人在线| 亚洲一区视频在线| 北条麻妃在线| 国产久一道中文一区| 久久精品72免费观看| 日韩精品一区二区不卡| 丝袜情趣国产精品| 美女主播精品视频一二三四| 中文字幕成人免费视频| 欧美日韩国产精品一区二区三区四区| av每日在线更新| 久久99久久精品国产| 激情综合一区二区三区| 日批视频免费在线观看| 色综合久久久久久中文网|