Java中的Optional類詳細解讀
1 前言
Optional 是 Java 8 的新特性,專治空指針異常(NullPointerException, 簡稱 NPE)問題,它是一個容器類,里面只存儲一個元素(這點不同于 Conllection)。
為方便用戶通過 Lambda 表達式調用 Optional 的方法,部分方法(如:filter、ifPresent、map、orElseGet)需傳入函數(shù)式接口
(如:Predicate、Consumer、Function、Supplier)參數(shù)。
2 主要屬性及構造方法
類定義
Optional 類位于 java.util 包中,類定義如下:
//T 為元素數(shù)據類型 public final class Optional<T>
主要屬性
//空容器 private static final Optional<?> EMPTY = new Optional<>(); //value 存儲容器內唯一元素 private final T value;
構造方法
//無參構造方法:this.value = null private Optional() //有參構造方法(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);
}應用:
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)
//獲取容器唯一元素,若為空,返回供應者(Supplier)提供的元素
public T orElseGet(Supplier<? extends T> other) {
return value != null ? value : other.get();
}應用:
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();
}應用:
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));
}
}應用:
Optional<String> op = Optional.of(new String("12345"));
Optional<Integer> op2 = op.map(str -> {
try {
return Integer.parseInt(str);
} catch (Exception e) {
return -1;
}
});到此這篇關于Java中的Optional類詳細解讀的文章就介紹到這了,更多相關Java的Optional類內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
feign調用第三方接口,編碼定義GBK,響應中文亂碼處理方式
這篇文章主要介紹了feign調用第三方接口,編碼定義GBK,響應中文亂碼處理方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01
IntelliJ IDEA進行中文漢化的詳細教程(附圖文講解)
今天為大家?guī)淼氖?nbsp;IntelliJ IDEA 中文漢化教程以及中文插件包下載教程,經常收到小伙伴在后臺給我留言,問 IDEA 怎么進行中文漢化,因為很多小伙伴是剛入門 Java,看到 IDEA 菜單全英文有些不太適應,需要的朋友可以參考下2024-12-12
SpringBoot和Vue2項目配置https協(xié)議過程
本文詳細介紹了SpringBoot項目和Vue2項目的部署流程及SSL證書配置,對于SpringBoot項目,需將.pfx文件放入resources目錄并配置server,然后打包部署,Vue2項目中,涉及檢查nginx的SSL模塊、編譯新的nginx文件2024-10-10

