精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

久久精品国产美女| 日韩在线视频线视频免费网站| 国产无限制自拍| 免费福利在线视频| 国产一区二区三区日韩 | 在线观看国产免费视频| 韩国三级一区| 亚洲国产另类av| 午夜精品福利一区二区| www精品国产| 日韩av一二三| 午夜欧美大片免费观看| 在线观看免费黄色网址| 精品国产一区二区三区不卡蜜臂 | 国内精品久久久久久久久电影网 | 中文字幕亚洲综合久久五月天色无吗'' | 中文字幕在线不卡一区| 韩国一区二区三区美女美女秀 | 美美哒免费高清在线观看视频一区二区 | 欧美日韩中字一区| 日韩少妇内射免费播放| 男女在线视频| 亚洲欧美另类小说视频| 日韩尤物视频| 头脑特工队2在线播放| 国产一区不卡在线| 国产精品视频专区| 特级西西444www大精品视频免费看| 综合在线一区| 日韩中文综合网| 免费人成又黄又爽又色| 欧美男男freegayvideosroom| 欧美一区二区黄色| 爱爱爱爱免费视频| www.国产精品| 欧美视频一二三区| 国产v亚洲v天堂无码久久久| 美女的胸无遮挡在线观看| 亚洲亚洲人成综合网络| 8x8x华人在线| 午夜成年人在线免费视频| 国产精品色婷婷| 日韩视频精品| 北岛玲一区二区三区| 久久久三级国产网站| 蜜桃久久影院| 国产综合在线观看| 久久九九久久九九| 日韩国产高清一区| 98在线视频| 中文字幕av一区 二区| 日韩中文字幕一区二区| 999国产在线视频| 国产精品福利一区二区| 少妇高潮流白浆| 成码无人av片在线观看网站| 亚洲视频一二三区| 无码毛片aaa在线| 污污的视频在线观看| 一区二区成人在线视频| 轻点好疼好大好爽视频| 黄色在线网站噜噜噜| 欧美午夜精品在线| 好男人www社区| 欧美爱爱视频| 欧美一区二区大片| jjzzjjzz欧美69巨大| 噜噜噜天天躁狠狠躁夜夜精品| 亚洲激情 国产| 污污内射在线观看一区二区少妇 | 日韩电视剧免费观看网站| 国产精品伦子伦| 欧美精品一区二区久久| 韩国成人免费视频| av大片在线播放| 国产婷婷一区二区| 亚洲一区二区免费视频软件合集| 日本激情在线观看| 一区二区三区在线不卡| 大j8黑人w巨大888a片| free欧美| 日韩欧美第一区| 色欲av无码一区二区三区| 久久高清免费| 久久久久久美女| 中文字幕 国产精品| 加勒比av一区二区| 精品综合久久久| 尤物视频在线免费观看| 亚洲在线免费播放| 男人搞女人网站| 日韩精品一区二区三区中文字幕| 亚洲福利视频网站| 精品一区二区三孕妇视频| 韩国在线一区| 国产精品女人久久久久久| 国产a级免费视频| 国产视频911| 日韩激情视频一区二区| 欧美不卡高清一区二区三区| 日韩欧美一区二区在线视频| 国产黄色网址在线观看| 欧美午夜免费影院| 国产日韩欧美在线| 在线观看xxx| 1区2区3区国产精品| 黄www在线观看| 日韩欧美一级| 日韩中文字幕久久| 69国产精品视频免费观看| 国产一区二区精品久久91| 欧美一区二区三区在线播放 | 欧美日韩在线播放视频| 久久久久国产精品一区| 国产精品玖玖玖| 欧美激情在线一区二区| av动漫在线观看| www.成人网| 日韩视频亚洲视频| 亚洲免费视频二区| 久久人人爽爽爽人久久久| 欧美又粗又长又爽做受| 国产精品va视频| 色诱女教师一区二区三区| av图片在线观看| www.66久久| 99久久免费观看| 欧美日韩中出| 久久久精品视频在线观看| 中文字幕+乱码+中文乱码www| 99久久婷婷国产综合精品电影 | 日韩欧美国产精品一区| 久久99久久99精品免费看小说| 先锋a资源在线看亚洲| 精品一区二区三区日本| 55av亚洲| 亚洲国产精品网站| 可以免费在线观看的av| 91在线播放网址| 日本一道本久久| 美女呻吟一区| 亚洲 日韩 国产第一| 高h调教冰块play男男双性文| 亚洲精品水蜜桃| 国产人妻精品久久久久野外| 亚洲国产精品久久久久蝴蝶传媒| 成人久久精品视频| 成人在线播放免费观看| 欧美一级在线观看| 精品99在线观看| 国产成人av电影免费在线观看| 国产91视频一区| 亚洲网一区二区三区| 欧美激情视频免费观看| 黄色av中文字幕| 婷婷久久综合九色综合伊人色| 熟妇人妻久久中文字幕| 欧美综合二区| 亚洲精品一区国产精品| 国产日本亚洲| 国内揄拍国内精品少妇国语| 亚洲欧美综合一区二区| 日本精品免费观看高清观看| 欧美老女人性生活视频| 激情五月婷婷综合| 日韩激情视频一区二区| 天天躁日日躁成人字幕aⅴ| 国产精品白嫩美女在线观看| 日本中文字幕在线播放| 日韩欧美成人一区二区| 日本在线播放视频| 国产精品久线在线观看| 男插女视频网站| 欧美中文日韩| 色中文字幕在线观看| av自拍一区| 日韩美女在线看| 黄色免费在线看| 欧美精品一区视频| 国产一级片免费在线观看| 国产精品成人一区二区三区夜夜夜| 色呦色呦色精品| 亚洲激情精品| 亚洲精品高清视频| 极品国产人妖chinesets亚洲人妖| 欧美一级视频免费在线观看| 日本在线天堂| 亚洲二区中文字幕| 91theporn国产在线观看| 一卡二卡三卡日韩欧美| 一区二区三区四区免费| 国产一区二区免费视频| 久久综合色视频| 国产精品久久久久久久免费观看| 国产精品乱码视频| 国产亚洲人成a在线v网站| 欧美日韩ab片| www.中文字幕久久久| 欧美精品一区二区三区很污很色的| 精品乱码一区内射人妻无码 | 中文字幕无线精品亚洲乱码一区| 国产极品久久久| 欧美视频完全免费看| 欧美精品二区三区| 亚洲美女视频在线| 中字幕一区二区三区乱码| 成人一区在线看| 中文字幕66页| 丝袜美腿成人在线| 丁香花在线影院观看在线播放| 日本一区二区三区视频| 久久久精彩视频| 日韩成人在线看| 国产日韩欧美在线观看| 日本久久免费| 韩国日本不卡在线| 欧洲中文在线| 久久精品亚洲一区| lutube成人福利在线观看| 亚洲精品成人久久久| 精品国产一级片| 欧美精品在线观看一区二区| 久久午夜鲁丝片| 精品久久久久久亚洲国产300| 日韩视频永久免费| 国精品人伦一区二区三区蜜桃| 91免费精品国自产拍在线不卡| 绯色av蜜臀vs少妇| 国产乱一区二区| 一区二区三区欧美精品| 日本不卡一区二区| 欧美精品一区二区三区免费播放| 1024成人| 我的公把我弄高潮了视频| 欧美日韩国产高清| 欧美一级爱爱视频| 91精品国产91久久综合| 尤物一区二区三区| 97精品中文字幕| 一区二区三区四区在线视频| 成久久久网站| 亚洲国产欧美不卡在线观看| 日韩黄色大片网站| 日韩精品一区二区三区色偷偷| 美女精品一区最新中文字幕一区二区三区| 国产欧美亚洲日本| 日韩伦理一区二区三区| 久久久久久一区| 久久99免费视频| 日韩av一区二区三区在线| 欧美日韩性在线观看| 亚洲视频导航| 综合久久久久| 欧美日韩精品在线一区二区| 亚洲欧美网站| 亚洲国产高清av| 国产在线观看一区二区| 国产精品99精品无码视亚| 岛国精品在线播放| 性一交一黄一片| 99久久精品国产一区二区三区| 精品久久久久久中文字幕人妻最新| 久久久精品影视| 黄色激情小视频| 一片黄亚洲嫩模| 久久人妻免费视频| 欧美色网站导航| 午夜精品久久久久久久99热黄桃 | 性感美女一区二区三区| eeuss影院一区二区三区| av电影网站在线观看| 国产精品每日更新在线播放网址| 国产精品嫩草影院俄罗斯| 亚洲午夜影视影院在线观看| 国产又爽又黄的视频| 欧美在线观看视频一区二区三区 | 日韩av综合网站| 国产精品一区二区婷婷| 伊人男人综合视频网| 粗大黑人巨茎大战欧美成人| 国产91精品青草社区| 粉嫩91精品久久久久久久99蜜桃 | 91精品秘密在线观看| 国产美女永久无遮挡| 丝袜脚交一区二区| 波多野结衣中文字幕在线播放| 99精品热视频| 国产三级精品三级观看| 午夜视频在线观看一区二区 | 精品国产91洋老外米糕| 可以在线观看的av网站| 大胆人体色综合| av综合电影网站| 91在线网站视频| 美女毛片一区二区三区四区最新中文字幕亚洲| 亚洲一区在线直播| 中文亚洲字幕| 在线a免费观看| 久久久蜜臀国产一区二区| 91视频综合网| 色狠狠av一区二区三区| 成人小说亚洲一区二区三区| 亚洲一二在线观看| 大黄网站在线观看| 成人久久一区二区| 精品一区二区三区在线| 又粗又黑又大的吊av| 国产在线精品免费av| 99精品全国免费观看| 天天av天天翘天天综合网色鬼国产| 亚洲综合免费视频| 国产亚洲欧美日韩美女| 末成年女av片一区二区下载| av一区二区三区四区电影| 久久亚洲国产| 国产精品亚洲二区在线观看| 成人免费福利片| 久久久久久久久久一区二区三区 | 人妻精品无码一区二区| 久久精品中文字幕电影| 国产成人精品一区二区三区免费 | 99视频在线观看地址| 欧美最猛性xxxxx亚洲精品| a级日韩大片| 免费视频爱爱太爽了| 国产一区二区三区在线观看免费 | 国产亚洲精品v| 国产日韩视频一区| 亚洲综合在线五月| 精品二区在线观看| 久久中文字幕国产| 日韩电影精品| 一区不卡视频| 久久精品国产精品亚洲红杏| 一二三四国产精品| 欧美性猛交xxxx乱大交退制版| 免费动漫网站在线观看| 日本久久亚洲电影| 免费欧美激情| 91淫黄看大片| 国产精品午夜在线| 亚洲精品一区二三区| 一区二区三区视频在线| 综合在线影院| 日韩国产精品一区二区| 男女性色大片免费观看一区二区 | 欧美777四色影| 国产999免费视频| 一区二区三区.www| 韩国中文字幕hd久久精品| 欧美精品久久久久久久久久| 99热这里只有精品首页| 人妻夜夜添夜夜无码av| 99久久国产综合色|国产精品| 中文字幕在线字幕中文| 亚洲激情国产精品| 国产欧美一区二区三区精品酒店| 欧美日韩精品免费在线观看视频| 亚洲欧美清纯在线制服| 摸摸摸bbb毛毛毛片| 欧美日本一区二区在线观看| 成人免费在线| 99精品国产一区二区| 一区二区国产在线观看| 欧洲美熟女乱又伦| 制服丝袜亚洲播放| 2020国产在线| 日韩精品不卡| 国产精品亚洲第一| 久久草视频在线| 这里只有精品视频在线| 精品视频成人| 国产综合免费视频| 国产精品久久久久久久久免费樱桃| www天堂在线| 欧美在线免费观看| 99视频精品视频高清免费| 国产精品偷伦视频免费观看了| 精品久久久久久中文字幕| 91福利在线视频| 国产激情一区二区三区在线观看 | 黄色的视频在线免费观看| 国产在线高清精品| 国产欧美在线| 91久久国产综合| 精品视频久久久久久久| 四虎精品永久免费| 成人性免费视频| 国产嫩草在线视频| 欧美一级bbbbb性bbbb喷潮片| 欧美老女人另类| 少妇欧美激情一区二区三区| 一本色道**综合亚洲精品蜜桃冫| 久草免费在线观看| 免费av一区二区三区| 国产成人精品免费在线| 人妻中文字幕一区二区三区| 久久久久久国产三级电影| 超碰成人久久| 深爱五月激情网|