1. 程式人生 > >Java8新特性之Optional詳解

Java8新特性之Optional詳解

Java8中對空值提供了一個操作類。Optional。下面介紹下他的方法。

靜態方法:

Optional.of(T)    返回Optional包裹的物件,如果傳入的引數為空,將丟擲空指標異常。

Optional.ofNullable(T) 返回Optional包裹的物件,引數如果為空返回空的Optional物件。

Optional.empty() 返回空的Optional物件。

例項方法:

isPresent()  是否存在,如果值為空返回false,否則返回true

get()值存在返回值否則丟擲異常

map()值存在的情況下執行自定義方法,傳入引數是值,返回可以是任意型別的物件。

filter()值存在的情況下執行自定義方法,傳入引數是值,返回true或false。

flatMap()與map方法基本一致,不同的是,返回型別只能是值得型別。

程式碼如下:

package com.example.thread;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Optional;
import java.util.Random;
public class OptaionalTest {
private static Logger logger = LoggerFactory.getLogger(OptaionalTest.class);
public static void
main(String[] args) {
OptaionalTest obj = new OptaionalTest();
Optional<Integer> optional = obj.getNum();
logger.info("optional.isPresent():" + optional.isPresent());
optional.ifPresent((val1) -> {//值是否存在
logger.info("optional.ifPresent():" + optional.get());
logger.info("optional.get():" + optional
.get());
String map = optional.map((intVal) -> (intVal + 1000) + "").get();//map的返回值可以是任何型別的.
logger.info("optional.map():" + map);
optional.filter((intVal) -> {//新的方法以值為引數
if (intVal > 25) {
logger.info("optional.filter()>25:" + intVal);
return true;
}
logger.info("optional.filter()<=25:" + intVal);
return false;
});
Optional<Integer> a = optional.flatMap((intVal) -> Optional.ofNullable(intVal + 1));//返回值必須是Optional型別的
});
logger.info("optional.orElse:" + optional.orElse(1));
logger.info("" + optional.orElseGet(() ->

{
logger.info("optional.orElseGet:" + -1);
return -1;
}));
}

Optional<Integer> getNum() {
Integer num = new Random().nextInt(100);
if (num < 50) {
return Optional.empty();
}
return Optional.of(num);
}
}

相關推薦

Java8特性Optional

Java8中對空值提供了一個操作類。Optional。下面介紹下他的方法。 靜態方法: Optional.of(T)    返回Optional包裹的物件,如果傳入的引數為空,將丟擲空指標異常。 Optional.ofNullable(T) 返回Optional包裹的物件

Java8特性Stream

       最近在公司的專案中常用Stream結合Lambda表示式來操作集合,使得專案整體程式碼簡潔和整齊;並且上一章也講了一些關於Stream的常用操作,比如:map()、filter()、concat()、reduce()、max()、min()、

Java8特性Stream

寫了Lambda表示式的部落格,怎麼能少了對Stream的學習呢!接下來就將我所理解的Stream分享給大家,歡迎指出不足之處... 一、為什麼要使用Stream?Stream是什麼?在Java中該怎麼用呢?        (1)為什麼要使用Str

Java8特性CompletableFuture

jdk1.8中加入了CompletableFuture類來輔助實現非同步程式設計。上一節中提到了執行緒池執行非同步方法返回Fufure例項,但是當執行多個非同步任務時,如何判斷這些任務都已執行完畢則沒有好的辦法,只能通過定時輪詢去判斷這些任務isDone(),並且也需要建立

Java8特性Optional

.get value api new java代碼 optional padding 正常 line 空指針異常一直是困擾Java程序員的問題,也是我們必須要考慮的。當業務代碼中充滿了if else判斷null 的時候程序變得不再優雅,在Java8中提供了Optional類

JDK 1.8 特性Stream 個人筆記

雖然java 10已經發布,11 已經在路上,雖然 java EE 已經更名為 jakarta EE,但是大多數人連jdk1.8的新特性都不太瞭解,本人也是如此,所以在學習Java 8 API 新增的 Stream 的時候 做一些個人筆記,希望幫助自己的同時也能幫到大家。

Java8特性Optional

java8 Optional 一. 用Optional取代null 1. Optional類 java.util.Optional<T>是一個封裝Optional值的類。 變量存在時,Optional類只是對類進行簡單的封裝。變量不存在時,缺失的值會被建模

Java8特性五:Optional

並且 信息 owa true class object throws 當前 text   NullPointerException相信每個JAVA程序員都不陌生,是JAVA應用程序中最常見的異常。之前,Google Guava項目曾提出用Optional類來包裝對象從而解決

Java8特性空指標異常的剋星Optional

Java8新特性系列我們已經介紹了Stream、Lambda表示式、DateTime日期時間處理,最後以“NullPointerException” 的剋星Optional類的講解來收尾。 背景 作為開發人員每天與NullPointerException鬥智鬥勇。每接收到引數或呼叫方法獲得值得判斷一下是否為n

h5特性 File API

sda 文件讀取 預覽 文件名 標簽 dom 直接 mod 詳解   之前一直覺得h5的新特性就是一些新標簽呢,直到想研究一下圖片上傳預覽的原理,才發現還是有好多新的api的,只是不兼容ie低版本,挺可惜的,   File API在表單中文件輸入字段基礎上,又添加了一些直接

Java8特性forEach遍歷

clas 分享圖片 pos 分享 inf div post for AC 參考文章: https://www.cnblogs.com/billyu/p/6118008.htmlJava8新特性之forEach遍歷

Java8特性:行為參數化傳遞代碼

Java8 行為參數化 行為參數化:一個方法接受多個不同的行為(或戰略)作為參數,並在內部使用他們,完成不同的行為的能力。 public interface ApplePredicate { /** * 謂詞(選擇標準) * @param apple * @re

Java8特性:Lambda表達式

java8 Lambda 一. Lambda定義(λ): -- 匿名,它不像普通方法那樣有一個明確的名稱; -- 函數,它不像普通方法那樣屬於某個特定的類,但和方法一樣,Lambda有參數列表、函數主體、返回類型或拋出異常列表: -- 傳遞,Lambda可以作為參數傳遞給方法或存儲在

Java8特性:CompletableFuture

java8 CompletableFuture 一. CompletableFuture 1.Future接口 Future設計的初衷:對將來某個時刻會發生的結果進行建模。 它建模了一種異步計算,返回一個執行運算結果的引用,當運算結束後,這個引用被返回給調用方。在Fu

Java8特性的日期和時間API

java8 時間日期API 一. LocalDate、LocalTime、Instant、Duration以及Period 1.LocalDate只提供日期,不含當天時間信息LocalDate date = LocalDate.of(2018, 5, 03); int year = da

Java8特性:默認方法

java8 默認方法 一. 默認方法 1.默認方法的使用模式: -- 可選方法 類實現了接口,但是刻意地將一些方法留白。public interface Iterator<E> { boolean hasNext(); E next

java8特性Lambda表達式入門

java8新特性 obj 返回值 報錯 java8 虛擬 ret UNC bject 一 什麽是Lambda表達式  Lambda表達式:可以讓你的代碼更加的簡潔。ambda無法單獨出現,需要一個函數式接口來盛放,可以說lambda表達式方法體是函數式接口的實現,lambd

Java8 特性流式數據處理

沒有 ica all red 年齡 過濾 計算機 any spl 流中間操作 操 作 類 型 返回類型 操作參數 函數描述符 filter 中間 Stream Predicate T -> boolean map 中間 Stream Function

java8特性lambda

函數式 var ride urn fun 模擬實現 face 清晰 例如 一、什麽是lambda 在函數編程中,我們經常將方法作為參數來傳遞,這樣不僅結構清晰而且更容易去組織一個良好的代碼結構。例如Javascript寫法: <script type="text/j

【小家java】Java8特性---CompletableFuture的系統講解和例項演示(使用CompletableFuture構建非同步應用)

相關閱讀 【小家java】java5新特性(簡述十大新特性) 重要一躍 【小家java】java6新特性(簡述十大新特性) 雞肋升級 【小家java】java7新特性(簡述八大新特性) 不溫不火 【小家java】java8新特性(簡述十大新特性) 飽受讚譽 【小家java】java9