Java1.8新特性——Optional類

Java1.8新特性——Optional類

摘要:本文主要學習了Java1.8新增長的Optional類。html

部份內容來自如下博客:java

https://www.cnblogs.com/1ning/p/9140800.html函數

概述

對於Java開發人員來講,NullPointException是很常見的一個異常,爲了不這個異常,一般的作法是進行if條件判斷,但若是代碼裏面充滿了大量的null判斷會讓程序變的再也不優雅。學習

因此而Java1.8中引入了一個新的Optional類,用來處理可能爲null的變量,在減小NullPointException的同時,也提高了代碼的美觀度。但首先咱們須要明確的是,它並非對null關鍵字的一種替代,而是對於null斷定提供了一種更加優雅的實現,從而避免NullPointException。spa

獲取

empty()方法

含義:用來建立一個空的Optional對象。code

代碼以下:htm

1 Optional<String> name = Optional.empty();

of()方法

含義:用來包裝一個不爲null的對象,若是對象爲null,則拋出NullPointException。對象

代碼以下:blog

1 Optional<String> name = Optional.of(str);

ofNullable()方法

含義:用來包裝一個能夠爲null的對象,若是對象爲null,則建立一個空的Optional對象。接口

代碼以下:

1 Optional<String> name = Optional.ofNullable(str);

經常使用方法

isPresent()方法

含義:用來判斷Optional對象是否爲空,若是爲空則返回true,若是不爲空則返回false。

代碼以下:

1 Optional<String> name = Optional.ofNullable(null);
2 System.out.println(name.isPresent());// true

ifPresent()方法

含義:若是Optional對象不爲空則執行方法調用,若是爲空則什麼也不作。

代碼以下:

1 Optional<String> name = Optional.ofNullable("name");
2 name.ifPresent(System.out::println);// name

get()方法

含義:若是Optional對象不爲空,則返回值,若是爲空,則拋出NoSuchElementException。

代碼以下:

1 Optional<String> name = Optional.ofNullable("name");
2 System.out.println(name.get());// name

orElse()方法

含義:若是Optional對象不爲空,則返回值,若是爲空,則返回指定的值。

代碼以下:

1 Optional<String> name = Optional.ofNullable(null);
2 System.out.println(name.orElse("no name"));// no name

orElseGet()方法

含義:若是Optional對象不爲空,則返回值,若是爲空,則返回由傳入的Supplier函數式接口生成的值。

代碼以下:

1 Optional<String> name = Optional.ofNullable(null);
2 System.out.println(name.orElseGet(() -> "no name"));// no name

orElseThrow()方法

含義:若是Optional對象不爲空,則返回值,若是爲空,則返回由傳入的Supplier函數式接口生成的異常。

代碼以下:

1 Optional<String> name = Optional.ofNullable(null);
2 System.out.println(name.orElseThrow(() -> new NullPointerException()));// java.lang.NullPointerException

filter()方法

含義:判斷Optional的值是否知足filter指定的條件,若是知足則返回原來的Optional對象,若是不知足則建立一個空的Optional對象並返回。

代碼以下:

1 Optional<String> name = Optional.ofNullable("name").filter(e -> e != null);
2 System.out.println(name);// Optional[name]

map()方法

含義:若是Optional不爲空,則執行傳入的返回值爲任意類型的Function函數式接口並將返回值包裝爲Optional對象,若是Optional爲空,則建立一個空的Optional對象並返回。

代碼以下:

1 Optional<Integer> length = Optional.ofNullable("name").map(String::length);
2 System.out.println(length);// Optional[4]

flatMap()方法

含義:若是Optional不爲空,則執行傳入的返回值爲Optional類型的Function函數式接口並獲得返回的Optional對象,若是Optional爲空,則建立一個空的Optional對象並返回。

代碼以下:

1 User user = null;
2 user = Optional.ofNullable(user).flatMap(Optional::ofNullable).orElse(new User());
3 System.out.println(user);// test.User@768debd

注意事項

orElse()方法和orElseGet()方法的區別

這兩個方法在調用的Optional對象不爲空時,返回的都是原對象。當Optional對象爲空時,orElse()方法返回指定的值,orElseGet()方法返回的是接口調用的返回值。

此外,若是Optional對象若是不爲空,orElse()方法也會執行,orElseGet()方法不會執行。

好比,orElse()方法返回一個新的對象,orElseGet()方法調用接口返回的也是一個新的對象,若是Optional對象不爲空,orElse()方法會執行初始化,orElseGet()方法不會執行初始化。

map()方法和flatMap()方法的區別

這兩個方法在調用的Optional對象爲空時,都會建立一個空對象返回。若是Optional對象不爲空,map()方法會將執行接口獲得的返回值包裝爲Optional對象,flatMap()方法會直接返回執行接口獲得的Optional類型的返回值。

相關文章
相關標籤/搜索