欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

1 前言

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

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

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

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

類定義

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

//T 為元素數(shù)據(jù)類型
public final class Optional<T>

主要屬性

//空容器
private static final Optional<?> EMPTY = new Optional<>();
//value 存儲容器內(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()
//判斷容器是否為空,若不為空,消費元素
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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

    Java實現(xiàn)簡單的抽牌游戲

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

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

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

    JAVA swing布局管理器實例解析

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

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

    這篇文章主要介紹了spring通過導(dǎo)入jar包和配置xml文件啟動,本文分步驟通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    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類/包裝類的使用說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • IntelliJ IDEA進(jìn)行中文漢化的詳細(xì)教程(附圖文講解)

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

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

    Java8新日期時間API的20個使用示例

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

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

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

最新評論