最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中的Optional類詳細(xì)解讀

 更新時(shí)間:2023年08月23日 11:45:01   作者:little_fat_sheep  
這篇文章主要介紹了Java中的Optional類詳細(xì)解讀,Optional是Java中的一個(gè)類,它的作用是用于解決空指針異常的問題,它提供了一些有用的方法,可以幫助我們避免顯式進(jìn)行空值檢測(cè),需要的朋友可以參考下

1 前言

Optional 是 Java 8 的新特性,專治空指針異常(NullPointerException, 簡(jiǎn)稱 NPE)問題,它是一個(gè)容器類,里面只存儲(chǔ)一個(gè)元素(這點(diǎn)不同于 Conllection)。

為方便用戶通過 Lambda 表達(dá)式調(diào)用 Optional 的方法,部分方法(如:filter、ifPresent、map、orElseGet)需傳入函數(shù)式接口

(如:Predicate、Consumer、Function、Supplier)參數(shù)。

2 主要屬性及構(gòu)造方法

類定義

Optional 類位于 java.util 包中,類定義如下:

//T 為元素?cái)?shù)據(jù)類型
public final class Optional<T>

主要屬性

//空容器
private static final Optional<?> EMPTY = new Optional<>();
//value 存儲(chǔ)容器內(nèi)唯一元素
private final T value;

構(gòu)造方法

//無參構(gòu)造方法:this.value = null
private Optional()
//有參構(gòu)造方法(value不允許為空):this.value = Objects.requireNonNull(value)
private Optional(T value)

3 常用方法

創(chuàng)建容器(empty、of、ofNullable)

//創(chuàng)建空容器:return (Optional<T>) EMPTY
public static<T> Optional<T> empty()
//創(chuàng)建容器(value不允許為空):return new Optional<>(value)
public static <T> Optional<T> of(T value)
//創(chuàng)建容器(value允許為空):return value == null ? empty() : of(value)
public static <T> Optional<T> ofNullable(T value)

容器判空(isPresent)

//判斷容器是否為空:return value != null
public boolean isPresent()
//判斷容器是否為空,若不為空,消費(fèi)元素
public void ifPresent(Consumer<? super T> consumer) {
	if (value != null)
		consumer.accept(value);
}

應(yīng)用:

Optional<User> op = Optional.of(new User("張三", 20));
op.ifPresent(user -> System.out.println(user));
//op.ifPresent(System.out::println);

獲取元素(get、orElse、orElseGet)

//獲取容器中唯一元素:return value
public T get()
//獲取容器唯一元素,若為空,返回指定值:return value != null ? value : other
public T orElse(T other)
//獲取容器唯一元素,若為空,返回供應(yīng)者(Supplier)提供的元素
public T orElseGet(Supplier<? extends T> other) {
	return value != null ? value : other.get();
}

應(yīng)用: 

Optional<User> op = Optional.ofNullable(null);
User user = op.orElseGet(() -> new User("張三", 20));

篩選元素(filter)

//過濾不符合斷言(Predicate)的元素
public Optional<T> filter(Predicate<? super T> predicate) {
	Objects.requireNonNull(predicate);
	if (!isPresent())
		return this;
	else
		return predicate.test(value) ? this : empty();
}

 應(yīng)用: 

Optional<User> op = Optional.of(new User("張三", 20));
Optional<User> op2 = op.filter(user -> user.age > 18);

映射元素(map)

//將 T 類型元素映射為 U 類型元素
public<U> Optional<U> map(Function<? super T, ? extends U> mapper) {
	Objects.requireNonNull(mapper);
	if (!isPresent())
		return empty();
	else {
		return Optional.ofNullable(mapper.apply(value));
	}
}

應(yīng)用: 

Optional<String> op = Optional.of(new String("12345"));
Optional<Integer> op2 = op.map(str -> {
	try {
		return Integer.parseInt(str);
	} catch (Exception e) {
		return -1;
	}
});

到此這篇關(guān)于Java中的Optional類詳細(xì)解讀的文章就介紹到這了,更多相關(guān)Java的Optional類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java中的arrays.sort()代碼詳解

    java中的arrays.sort()代碼詳解

    這篇文章主要介紹了Java中的Arrays.sort()代碼詳解,涉及Arrays.sort()簡(jiǎn)單示例,策略模式,”super”的使用等相關(guān)內(nèi)容,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • 歸并算法之有序數(shù)組合并算法實(shí)現(xiàn)

    歸并算法之有序數(shù)組合并算法實(shí)現(xiàn)

    這篇文章主要介紹了歸并算法之有序數(shù)組合并算法實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • 淺談自定義注解在Spring中的應(yīng)用

    淺談自定義注解在Spring中的應(yīng)用

    這篇文章主要介紹了淺談自定義注解在Spring中的應(yīng)用,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • java實(shí)現(xiàn)查找替換功能

    java實(shí)現(xiàn)查找替換功能

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)查找替換功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • Java中static關(guān)鍵字的作用解析

    Java中static關(guān)鍵字的作用解析

    這篇文章主要介紹了Java中static關(guān)鍵字的作用解析,Java 中,不能在所有類之外定義全局變量,只能通過在一個(gè)類中定義公用、靜態(tài)的變量來實(shí)現(xiàn)一個(gè)全局變量,需要的朋友可以參考下
    2023-11-11
  • java Unsafe詳細(xì)解析

    java Unsafe詳細(xì)解析

    Unsafe為我們提供了訪問底層的機(jī)制,這種機(jī)制僅供java核心類庫(kù)使用,而不應(yīng)該被普通用戶使用。但是,為了更好地了解java的生態(tài)體系,我們應(yīng)該去學(xué)習(xí)它,去了解它,不求深入到底層的C/C++代碼,但求能了解它的基本功能。下面小編來和大家一起學(xué)習(xí)
    2019-05-05
  • Java創(chuàng)建數(shù)組的幾種方式總結(jié)

    Java創(chuàng)建數(shù)組的幾種方式總結(jié)

    下面小編就為大家?guī)硪黄狫ava創(chuàng)建數(shù)組的幾種方式總結(jié)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-10-10
  • 詳解DES加密算法的原理與Java實(shí)現(xiàn)

    詳解DES加密算法的原理與Java實(shí)現(xiàn)

    DES 加密,是對(duì)稱加密。對(duì)稱加密,顧名思義,加密和解密的運(yùn)算全都是使用的同樣的秘鑰。這篇文章主要為大家講講DES加密算法的原理與Java實(shí)現(xiàn),需要的可以參考一下
    2022-10-10
  • spring動(dòng)態(tài)控制定時(shí)任務(wù)的實(shí)現(xiàn)

    spring動(dòng)態(tài)控制定時(shí)任務(wù)的實(shí)現(xiàn)

    在實(shí)際項(xiàng)目中,經(jīng)常需要?jiǎng)討B(tài)的控制定時(shí)任務(wù),比如通過接口增加、啟動(dòng)、停止、刪除定時(shí)任務(wù),本文主要介紹了spring動(dòng)態(tài)控制定時(shí)任務(wù)的實(shí)現(xiàn),感興趣的可以了解一下
    2024-01-01
  • Java深度優(yōu)先遍歷解決排列組合問題詳解

    Java深度優(yōu)先遍歷解決排列組合問題詳解

    這篇文章主要介紹了Java深度優(yōu)先遍歷解決排列組合問題詳解,深度優(yōu)先搜索是遞歸過程,帶有回退操作,因此需要使用棧存儲(chǔ)訪問的路徑信息,當(dāng)訪問到的當(dāng)前頂點(diǎn)沒有可以前進(jìn)的鄰接頂點(diǎn)時(shí),需要進(jìn)行出棧操作,將當(dāng)前位置回退至出棧元素位置,需要的朋友可以參考下
    2024-01-01

最新評(píng)論

凤庆县| 石屏县| 泰和县| 临西县| 汽车| 东源县| 济宁市| 塘沽区| 镇沅| 镇沅| 卓资县| 固始县| 深水埗区| 洛隆县| 明溪县| 彭阳县| 苍梧县| 榆中县| 四会市| 合江县| 南川市| 英吉沙县| 锡林浩特市| 松江区| 蚌埠市| 开封市| 巨野县| 乡宁县| 永济市| 廊坊市| 玉树县| 舒兰市| 红河县| 云和县| 九寨沟县| 贺州市| 三门县| 察雅县| 临安市| 安仁县| 裕民县|