java8新特性---Optional類
阿新 • • 發佈:2018-11-12
轉自:https://blog.csdn.net/hwsdau/article/details/78791328
我們首先要判斷這個返回值是否為null,只有在非空的前提下才能將其作為其他方法的引數
Optional類是一個可以為null的容器物件。探求一下它的方法。
1、of 為非null的值建立一個Optional
of方法通過工廠方法建立Optional類。需要注意的是,建立物件時傳入的引數不能為null。如果傳入引數為null,則丟擲 NullPointerException 。
public class OptionalDemo { public static void main(String[] args) { //建立Optional例項,也可以通過方法返回值得到。 Optional<String> name = Optional.of("Sanaulla"); //建立沒有值的Optional例項,例如值為'null' Optional empty = Optional.ofNullable(null); //isPresent方法用來檢查Optional例項是否有值。 if (name.isPresent()) { //呼叫get()返回Optional值。 System.out.println(name.get()); } try { //在Optional例項上呼叫get()丟擲NoSuchElementException。 System.out.println(empty.get()); } catch (NoSuchElementException ex) { System.out.println(ex.getMessage()); } //ifPresent方法接受lambda表示式引數。 //如果Optional值不為空,lambda表示式會處理並在其上執行操作。 name.ifPresent((value) -> { System.out.println("The length of the value is: " + value.length()); }); //如果有值orElse方法會返回Optional例項,否則返回傳入的錯誤資訊。 System.out.println(empty.orElse("There is no value present!")); System.out.println(name.orElse("There is some value!")); //orElseGet與orElse類似,區別在於傳入的預設值。 //orElseGet接受lambda表示式生成預設值。 System.out.println(empty.orElseGet(() -> "Default Value")); System.out.println(name.orElseGet(() -> "Default Value")); try { //orElseThrow與orElse方法類似,區別在於返回值。 //orElseThrow丟擲由傳入的lambda表示式/方法生成異常。 empty.orElseThrow(ValueAbsentException::new); } catch (Throwable ex) { System.out.println(ex.getMessage()); } //map方法通過傳入的lambda表示式修改Optonal例項預設值。 //lambda表示式返回值會包裝為Optional例項。 Optional<String> upperName = name.map((value) -> value.toUpperCase()); System.out.println(upperName.orElse("No value found")); //flatMap與map(Funtion)非常相似,區別在於lambda表示式的返回值。 //map方法的lambda表示式返回值可以是任何型別,但是返回值會包裝成Optional例項。 //但是flatMap方法的lambda返回值總是Optional型別。 upperName = name.flatMap((value) -> Optional.of(value.toUpperCase())); System.out.println(upperName.orElse("No value found")); //filter方法檢查Optiona值是否滿足給定條件。 //如果滿足返回Optional例項值,否則返回空Optional。 Optional<String> longName = name.filter((value) -> value.length() > 6); System.out.println(longName.orElse("The name is less than 6 characters")); //另一個示例,Optional值不滿足給定條件。 Optional<String> anotherName = Optional.of("Sana"); Optional<String> shortName = anotherName.filter((value) -> value.length() > 6); System.out.println(shortName.orElse("The name is less than 6 characters")); } }
輸出:
Sanaulla
No value present
The length of the value is: 8
There is no value present!
Sanaulla
Default Value
Sanaulla
No value present in the Optional instance
SANAULLA
SANAULLA
Sanaulla
The name is less than 6 characters