亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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)文章

  • feign調(diào)用第三方接口,編碼定義GBK,響應(yīng)中文亂碼處理方式

    feign調(diào)用第三方接口,編碼定義GBK,響應(yīng)中文亂碼處理方式

    這篇文章主要介紹了feign調(diào)用第三方接口,編碼定義GBK,響應(yīng)中文亂碼處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Java實(shí)現(xiàn)簡(jiǎn)單的抽牌游戲

    Java實(shí)現(xiàn)簡(jiǎn)單的抽牌游戲

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)單的抽牌游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • java實(shí)現(xiàn)上傳和下載工具類

    java實(shí)現(xiàn)上傳和下載工具類

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)上傳和下載工具類,文件上傳到ftp服務(wù)工具類,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • JAVA swing布局管理器實(shí)例解析

    JAVA swing布局管理器實(shí)例解析

    這篇文章主要介紹了JAVA swing布局管理器實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • spring通過導(dǎo)入jar包和配置xml文件啟動(dòng)的步驟詳解

    spring通過導(dǎo)入jar包和配置xml文件啟動(dòng)的步驟詳解

    這篇文章主要介紹了spring通過導(dǎo)入jar包和配置xml文件啟動(dòng),本文分步驟通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 一文掌握J(rèn)ava中List和Set接口的基本使用

    一文掌握J(rèn)ava中List和Set接口的基本使用

    這篇文章主要為大家詳細(xì)介紹Java中List和Set接口,文中通過示例代碼讓大家能夠輕松掌握List和Set接口的基本使用,感興趣的可以跟隨小編一起學(xué)習(xí)一下
    2022-07-07
  • java——Byte類/包裝類的使用說明

    java——Byte類/包裝類的使用說明

    這篇文章主要介紹了java——Byte類/包裝類的使用說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • IntelliJ IDEA進(jìn)行中文漢化的詳細(xì)教程(附圖文講解)

    IntelliJ IDEA進(jìn)行中文漢化的詳細(xì)教程(附圖文講解)

    今天為大家?guī)淼氖?nbsp;IntelliJ IDEA 中文漢化教程以及中文插件包下載教程,經(jīng)常收到小伙伴在后臺(tái)給我留言,問 IDEA 怎么進(jìn)行中文漢化,因?yàn)楹芏嘈』锇槭莿側(cè)腴T Java,看到 IDEA 菜單全英文有些不太適應(yīng),需要的朋友可以參考下
    2024-12-12
  • Java8新日期時(shí)間API的20個(gè)使用示例

    Java8新日期時(shí)間API的20個(gè)使用示例

    這篇文章主要介紹了Java8新日期時(shí)間API的20個(gè)使用示例,為了學(xué)習(xí)Java 8的這個(gè)新庫(kù),這里我創(chuàng)建了20個(gè)以任務(wù)為導(dǎo)向的例子,需要的朋友可以參考下
    2015-03-03
  • SpringBoot和Vue2項(xiàng)目配置https協(xié)議過程

    SpringBoot和Vue2項(xiàng)目配置https協(xié)議過程

    本文詳細(xì)介紹了SpringBoot項(xiàng)目和Vue2項(xiàng)目的部署流程及SSL證書配置,對(duì)于SpringBoot項(xiàng)目,需將.pfx文件放入resources目錄并配置server,然后打包部署,Vue2項(xiàng)目中,涉及檢查nginx的SSL模塊、編譯新的nginx文件
    2024-10-10

最新評(píng)論