Java中的Optional類詳細(xì)解讀
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)中文亂碼處理方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01spring通過導(dǎo)入jar包和配置xml文件啟動的步驟詳解
這篇文章主要介紹了spring通過導(dǎo)入jar包和配置xml文件啟動,本文分步驟通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08IntelliJ IDEA進(jìn)行中文漢化的詳細(xì)教程(附圖文講解)
今天為大家?guī)淼氖?nbsp;IntelliJ IDEA 中文漢化教程以及中文插件包下載教程,經(jīng)常收到小伙伴在后臺給我留言,問 IDEA 怎么進(jìn)行中文漢化,因為很多小伙伴是剛?cè)腴T Java,看到 IDEA 菜單全英文有些不太適應(yīng),需要的朋友可以參考下2024-12-12SpringBoot和Vue2項目配置https協(xié)議過程
本文詳細(xì)介紹了SpringBoot項目和Vue2項目的部署流程及SSL證書配置,對于SpringBoot項目,需將.pfx文件放入resources目錄并配置server,然后打包部署,Vue2項目中,涉及檢查nginx的SSL模塊、編譯新的nginx文件2024-10-10