成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Java中的Optional類

JerryC / 2433人閱讀

摘要:工具類基本概念類的使用對(duì)象創(chuàng)建常用方法基本概念類是一個(gè)可以為的容器對(duì)象可以保存指定類型的值也可以只保存要么有值要么為中提供很多方法來(lái)避免顯式的進(jìn)行空值檢查如果值存在則調(diào)用方法會(huì)返回調(diào)用方法就會(huì)返回這個(gè)對(duì)象類是一個(gè)沒(méi)有子類的

基本概念

  • Optional類:
    • Optional是一個(gè)可以為null的容器對(duì)象.可以保存指定類型的值,也可以只保存null. 要么有值,要么為null
    • Optional中提供很多方法來(lái)避免顯式的進(jìn)行空值檢查.如果值存在則調(diào)用isPresent() 方法會(huì)返回true, 調(diào)用get() 方法就會(huì)返回這個(gè)對(duì)象
    • Optional類是一個(gè)沒(méi)有子類的工具類,很好的解決了空指針異常問(wèn)題

Optional類的使用

  • Java 8以前,通常使用if…else… 對(duì)對(duì)象進(jìn)行是否為空的判斷,然后再進(jìn)行邏輯處理,這樣的代碼非常冗余
  • Java 8中新增了Optional類,使用這個(gè)類可以避免空指針檢查,使代碼更加優(yōu)雅

Optioanl對(duì)象創(chuàng)建

of

  • of() 方法不支持null對(duì)象
Optional.of(T t);

ofNullable

  • ofNullable() 方法支持null對(duì)象
Optional.ofNullable();

empty

  • empty() 方法可以直接創(chuàng)建一個(gè)空的Optional對(duì)象
Optional.empty();

Optional常用方法

isPresent

  • isPresent(): 判斷是否包含值
    • 如果包含值則返回true
    • 如果不包含值則返回false
Optional<Object> optional = Optional.empty();// falseboolean optionalPresent = optional.isPresent();

get

  • get(): 獲取包含的值
    • 如果有值則返回這個(gè)值
    • 否則拋出NoSuchElementException: No value present異常
Optional<Object> optional = Optional.empty();// NoSuchElementException: No value presentObject o = optional.get();

orElse

  • orElse(str): 如果調(diào)用對(duì)象包含值則返回這個(gè)值,否則返回參數(shù)字符串str
String message = optional.orElse("Optional對(duì)象的值為空!");

orElseGet

  • orElseGet(supplier): 如果調(diào)用對(duì)象包含值則返回這個(gè)值,否則返回Lambda表達(dá)式獲取的值
  • orElseGet()orElse() 比較:
    • orElseGet()orElse() 類似,只是傳遞的參數(shù)類型不同
    • orElseGet() 的參數(shù)是Lambda類型
    • orElse() 的參數(shù)是String類型
String value = optional.orElseGet(() -> "Optional對(duì)象的值為空!");

orElseThrow

  • orElseThrow(exceptionSupplier): 如果調(diào)用對(duì)象包含值則返回這個(gè)值,否則拋出Lambda表達(dá)式中Supplier繼承的異常
String value = optional.orElseThrow(() -> new RunTimeExeception("Optional對(duì)象中的值不存在!"));

map

  • map(): 如果調(diào)用的對(duì)象有值,則進(jìn)行處理,并且返回處理后的Optional對(duì)象.否則返回Optional.empty()
  • Optional中的map() 方法和Stream流中的map() 方法類似,可以用于類型轉(zhuǎn)換等操作
Optional<String> map = optional.map(p -> p.getName());

flatMap

  • flatMap(): 如果調(diào)用的對(duì)象有值,則執(zhí)行mapping函數(shù)返回Optional類型的值.否則返回空Optional對(duì)象Optional.empty()
  • flatMap()map() 比較:
    • Optional中的flatMap()map() 方法類型,區(qū)別只是在于mapping的返回值不同
    • map() 方法的mapping函數(shù)返回值可以是任何類型的對(duì)象,在map() 方法返回之前會(huì)包裝為Optional對(duì)象
    • flatMap() 方法的mapping函數(shù)調(diào)用對(duì)象必須是Optional對(duì)象,調(diào)用結(jié)束后 ,flatMap() 中不會(huì)對(duì)結(jié)果使用Optional進(jìn)行封裝
// map()方法Optional<String> map = optional.map(p -> p.getName());// flatMap()方法Optional<String> flatMap = optional.flatMap(p -> Optional.of(p.getName()));

filter

  • filter(predicate): 通過(guò)傳入的Predicate限定條件對(duì)Optional對(duì)象中的值進(jìn)行過(guò)濾. 如果Optional對(duì)象中有值并且滿足Predicate過(guò)濾條件,就返回包含這些值的Optional對(duì)象,否則返回空Optinal對(duì)象Optional.empty()
String filter = optional.filter(s -> s.length > 0).orElse("Optional對(duì)象中的值不存在!");

ifPresent

  • ifPresent(consumer): 如果調(diào)用的對(duì)象包含值則使用對(duì)象的值調(diào)用consumer處理.否則不進(jìn)行任何操作
optional.ifPresent(System.out :: println);

ifPrsentOrElse

  • ifPresentOrElse(): Java 9以后的方法.如果調(diào)用的對(duì)象包含值則使用對(duì)象的值調(diào)用consumer.否則執(zhí)行自定義的Runnable操作
optional.ifPresentOrElse((str) -> System.out.println(str.toUpperCase()), () -> System.out.println("Optional對(duì)象中的值不存在!"));

equals

  • equals(): 判斷其余對(duì)象是否和Optional對(duì)象相等
boolean flag = optional.equals(obj);

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/124706.html

相關(guān)文章

  • Java8新特性總覽

    摘要:新特性總覽標(biāo)簽本文主要介紹的新特性,包括表達(dá)式方法引用流默認(rèn)方法組合式異步編程新的時(shí)間,等等各個(gè)方面。還有對(duì)應(yīng)的和類型的函數(shù)連接字符串廣義的歸約匯總起始值,映射方法,二元結(jié)合二元結(jié)合。使用并行流時(shí)要注意避免共享可變狀態(tài)。 Java8新特性總覽 標(biāo)簽: java [TOC] 本文主要介紹 Java 8 的新特性,包括 Lambda 表達(dá)式、方法引用、流(Stream API)、默認(rèn)方...

    mayaohua 評(píng)論0 收藏0
  • Java 8 新特性之Optional

    摘要:概述簡(jiǎn)介類是一個(gè)容器類,代表一個(gè)值存在或不存在,原來(lái)用表示一個(gè)值不存在,現(xiàn)在可以更好的表達(dá)這個(gè)概念,并且可以避免空指針異常。否則返回字符串長(zhǎng)度為與類似,要求返回值必須是字符串長(zhǎng)度為本文首發(fā)于凌風(fēng)博客新特性之類作者凌風(fēng) 1. 概述 1.1 簡(jiǎn)介 Optional 類(java.util.Optional)是一個(gè)容器類,代表一個(gè)值存在或不存在,原來(lái)用 null 表示一個(gè)值不存在,現(xiàn)在 Op...

    Little_XM 評(píng)論0 收藏0
  • java 8 實(shí)戰(zhàn)》讀書筆記 -第十章 用Optional取代null

    摘要:但返回的是一個(gè)類型的對(duì)象,這意味著操作的結(jié)果是一個(gè)類型的對(duì)象。反之,如果對(duì)象存在,這次調(diào)用就會(huì)將其作為函數(shù)的輸入,并按照與方法的約定返回一個(gè)對(duì)象。 一、Optional 類入門 Java 8中引入了一個(gè)新的類java.util.Optional。變量存在時(shí),Optional類只是對(duì)類簡(jiǎn)單封裝。變量不存在時(shí),缺失的值會(huì)被建模成一個(gè)空的Optional對(duì)象,由方法Optional.empt...

    時(shí)飛 評(píng)論0 收藏0
  • Java8實(shí)戰(zhàn)》-第十章筆記(用Optional取代null)

    摘要:是第一批在堆上分配記錄的類型語(yǔ)言之一。實(shí)際上,的這段話低估了過(guò)去五十年來(lái)數(shù)百萬(wàn)程序員為修復(fù)空引用所耗費(fèi)的代價(jià)。很明顯,這種方式不具備擴(kuò)展性,同時(shí)還犧牲了代碼的可讀性。是目前程序開(kāi)發(fā)中最典型的異常。完成這一任務(wù)有多種方法。 用Optional取代null 如果你作為Java程序員曾經(jīng)遭遇過(guò)NullPointerException,請(qǐng)舉起手。如果這是你最常遭遇的異常,請(qǐng)繼續(xù)舉手。非??上?,...

    flybywind 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<