摘要:上一篇小樂帶大家了解了新特性之,接下來將會繼續述說新特性之類是一個容器類,代表一個值存在或不存在,原來用表示一個值不存在,現在可以更好的表達這個概念。并且可以避免空指針異常。如果有值則將其返回,否則拋出。隱士地其中進行了判斷。
上一篇小樂帶大家了解了Java8新特性之Stream,接下來將會繼續述說Java新特性之Optional
Optional
為非null的值創建一個Optional,如果值為null,則會拋出NullPointerException
Optional2、ofNullableoptional = Optional.of(13); System.out.println(optional)
為指定的值創建一個Optional,如果指定的值為null,則返回一個空的Optional。
Optional3、isPresentoptional2 = Optional.ofNullable(null); System.out.println(optional2); optional2 = Optional.ofNullable("aaa"); System.out.println(optional2);
如果值存在返回true,否則返回false。
Optional4、getoptional2 = Optional.ofNullable(null); System.out.println(optional2); System.out.println(optional2.isPresent()); optional2 = Optional.ofNullable("aaa"); System.out.println(optional2); System.out.println(optional2.isPresent());
如果Optional有值則將其返回,否則拋出NoSuchElementException。
optional2 = Optional.ofNullable("aaa"); System.out.println(optional2); System.out.println(optional2.isPresent()); System.out.println(optional2.get());5、ifPresent
如果Optional實例有值則為其調用consumer,否則不做處理 。隱士地其中進行了null判斷。
public static void main(String[] args) { String str1 = "hello"; String str2 = null; Optional6、orElseoptional1 = Optional.ofNullable(str1); Optional optional2 = Optional.ofNullable(str2); optional1.ifPresent(str->System.out.println(str.length())); optional2.ifPresent(str-> System.out.println(str.length())); }
如果有值則將其返回,否則返回指定的其它值。
public static void main(String[] args) { String str1 = "hello"; String str2 = null; Optional7、orElseGetoptional1 = Optional.ofNullable(str1); Optional optional2 = Optional.ofNullable(str2); System.out.println(optional1.orElse("默認字符串")); System.out.println(optional2.orElse("默認字符串")); }
orElseGet與orElse方法類似,區別在于得到的默認值。orElse方法將傳入的一個值作為默認值,orElseGet方法可以接受Supplier接口的實現用來生成默認值
public static void main(String[] args) { Integer i = 20; Optional8、orElseThrowop = Optional.ofNullable(i); System.out.println(op.orElseGet(()->0)); System.out.println(Optional.ofNullable(null).orElseGet(()->0)); }
如果有值則將其返回,否則拋出supplier接口創建的異常。
public static void main(String[] args) { // 自己指定異常 System.out.println((Optional.ofNullable("a").orElseThrow(()->new IndexOutOfBoundsException()))); System.out.println((Optional.ofNullable(null).orElseThrow(()->new IndexOutOfBoundsException()))); }9、map
map處理有值的情況,如果有值,則對其執行調用map參數中的函數得到返回值,否則返回空Optional。
public static void main(String[] args) { List10、flatMaplist = new ArrayList (){ { add("aaa"); add("bbb"); add(null); } }; list.stream().forEach(temp ->{ Optional opt = Optional.ofNullable(temp); System.out.println(opt.map(n -> { return n.toUpperCase(); }).orElse("Nothing")); }); // 簡寫為如下形式 list.stream().forEach(temp->{ System.out.println(Optional.ofNullable(temp).map(n->n.toUpperCase()).orElse("Nothing")); }); }
如果有值,為其執行mapping函數返回Optional類型返回值,否則返回空Optional。flatMap與map(Funtion)方法類似,區別在于flatMap中的mapper返回值必須是Optional。調用結束時,flatMap不會對結果用Optional封裝。 可以將內容
public static void main(String[] args) { Optional11、filteropt1 = Optional.ofNullable("aaa"); Optional opt2 = Optional.ofNullable(null); System.out.println(opt1.flatMap(n->{ return Optional.ofNullable(n.toUpperCase()); }).orElse("還會沒有嗎")); System.out.println( opt2.flatMap(n->{ return Optional.ofNullable(n.toUpperCase()); }).orElse("還會沒有嗎")); }
如果有值并且滿足斷言條件返回包含該值的Optional,否則返回空Optional。
public static void main(String[] args) { Optionalopt1 = Optional.ofNullable("aabbbbaa"); Optional opt2 = Optional.ofNullable(null); System.out.println(opt1.filter(value->value.length()>6)); System.out.println(opt2.filter(value->value.length()>6)); }
好了,Java8新特性之Optional就介紹到這里了,接下去小樂將會繼續帶大家了解Java8新特性,請繼續關注,轉載請說明出處和作者。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/77588.html
摘要:大家好啊,上次小樂給大家介紹了最最重要的一個特性流,點擊可以回顧哦。并且可以避免空指針異常。這種操作對于參數判斷提供很大便利,例如參數滿足指定條件的后續操作查詢操作字符串拼接,常見的處理多請求頁面轉發處理等操作。 大家好啊,上次小樂給大家介紹了Java8最最重要的一個特性——Stream流,點擊可以回顧哦。 Optional類(java.util.Optional)是一個容器類,代表一...
摘要:歸約操作計算有效訂單總金額有效訂單總金額收集數據收集將流轉換為其他形式,方法作為終端操作,接收一個接口的實現,用于給中元素做匯總的方法。 接上一篇:《Java8新特性之stream》,下面繼續接著講Stream 5、流的中間操作 常見的流的中間操作,歸為以下三大類:篩選和切片流操作、元素映射操作、元素排序操作:showImg(https://segmentfault.com/img/b...
摘要:上一篇文章,小樂給大家帶來了新特性之,接下來本文將會給大家介紹新特性之前言通過發布新的來進一步加強對日期與時間的處理。 上一篇文章,小樂給大家帶來了Java8新特性之Optional,接下來本文將會給大家介紹Java8新特性之Date API 前言: Java 8通過發布新的Date-Time API來進一步加強對日期與時間的處理。 舊版的 Java 中,日期時間 API 存在諸多問題...
摘要:函數副作用會給程序設計帶來不必要的麻煩,引入潛在的,并降低程序的可讀性。所以只能采用這種曲線救國的方式。則是把這種曲線救國拿到了臺面上,并昭告天下,同時還對提供了一些語法支持。是自由變量,提供執行上下文,觸發閉包執行。 背景 自從2013年放棄了Java就再也沒有碰過。期間Java還發布了重大更新:引入lambda,但是那會兒我已經玩了一段時間Scala,對Java已經瞧不上眼。相比S...
摘要:表達式體現了函數式編程的思想,即一個函數亦可以作為另一個函數參數和返回值,使用了函數作參數返回值的函數被稱為高階函數。對流對象進行及早求值,返回值不在是一個對象。 Java8主要的改變是為集合框架增加了流的概念,提高了集合的抽象層次。相比于舊有框架直接操作數據的內部處理方式,流+高階函數的外部處理方式對數據封裝更好。同時流的概念使得對并發編程支持更強。 在語法上Java8提供了Lamb...
閱讀 713·2023-04-25 17:54
閱讀 2972·2021-11-18 10:02
閱讀 1132·2021-09-28 09:35
閱讀 649·2021-09-22 15:18
閱讀 2847·2021-09-03 10:49
閱讀 3051·2021-08-10 09:42
閱讀 2573·2019-08-29 16:24
閱讀 1255·2019-08-29 15:08