欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中的Optional使用詳細(xì)說明

 更新時(shí)間:2023年11月08日 09:51:47   作者:你就像甜甜的益達(dá)  
這篇文章主要介紹了Java中的Optional使用詳細(xì)說明,Optional就是相當(dāng)于把對(duì)象包了一層,將判斷空的部分代碼給單獨(dú)抽出來了,主要就是為了避免null引起的部分問題,需要的朋友可以參考下

簡(jiǎn)介

java.util.Optional java1.8 官方描述:

(這是一個(gè)可以為null的容器對(duì)象。如果值存在則isPresent()方法會(huì)返回true,調(diào)用get()方法會(huì)返回該對(duì)象。)

個(gè)人理解: Optional就是相當(dāng)于把對(duì)象包了一層,將判斷空的部分代碼給單獨(dú)抽出來了,主要就是為了避免null引起的部分問題.

Optional的使用

首先看看Optional的方法:

在這里插入圖片描述

三個(gè)靜態(tài)方法

  • Optional.empty()

返回一個(gè)空的Optional,用的不多;主要就是為了使Optional只存在有值和無值的情況,不存在包含null的情況,在后面的ofNullable方法中使用;

  • Optional.of(T value)
 
   public static <T> Optional<T> of(T value) {
        return new Optional<>(value);
    }
    
   private Optional(T value) {
        this.value = Objects.requireNonNull(value);
    }

   public static <T> T requireNonNull(T obj) {
        if (obj == null)
            throw new NullPointerException();
        return obj;
    }

傳入一個(gè)非null的value值,返回一個(gè)包含value的Option;如果為null會(huì)拋出空指針異常;

  • Optional.ofNullable(T value)(用的最多)
    public static <T> Optional<T> ofNullable(T value) {
        return value == null ? empty() : of(value);
    }

傳入一個(gè)非null的value值,返回一個(gè)包含value的Option;

傳入一個(gè)value值,返回一個(gè)包含value的Option;可以為null,如果為null則返回一個(gè)空的Optional,就是Optional.empty(),可以看看源碼

方法介紹

Optional一般鏈?zhǔn)秸{(diào)用,方法也比較簡(jiǎn)單

  • get()
    • 如果該值存在,將該值直接返回,否則拋出一個(gè) NoSuchElementException 異常。
  • isPresent()
    • 返回該值是否存在的布爾值,存在true不存在false;
  • isPresent(Consumer<? super T> consumer)
    • 沒有返回值,傳入的是一個(gè)函數(shù),如果存在執(zhí)行函數(shù),不存在則不執(zhí)行
  • filter(Predicate<? super T> predicate)
    • filter 方法接受一個(gè) Predicate 來對(duì) Optional 中包含的值進(jìn)行過濾,如果包含的值滿足條件,那么還是返回這個(gè) Optional;否則返回 Optional.empty。
  • map(Function<? super T, ? extends U> mapper)
    • 對(duì)該值執(zhí)行提供的 get方法調(diào)用。
  • flatMap(Function<? super T, Optional> mapper)
    • 同上,只不過Function返回的時(shí)候就是Optional;而map是代碼里面幫忙封裝了.
    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));
        }
    }

  public<U> Optional<U> flatMap(Function<? super T, Optional<U>> mapper) {
        Objects.requireNonNull(mapper);
        if (!isPresent())
            return empty();
        else {
            return Objects.requireNonNull(mapper.apply(value));
        }
    }

  • orElse(T other)

如果調(diào)用對(duì)象包含值,返回該值,否則返回t。

  • orElseGet(Supplier<? extends T> other)

如果調(diào)用對(duì)象包含值,返回該值,否則返回 other 獲取的值。

  • orElseThrow(Supplier<? extends X> exceptionSupplier)

如果調(diào)用對(duì)象包含值,返回該值,否則拋出 other 獲取的異常。

使用案例

  • 判斷對(duì)象是否存在,如果存在則執(zhí)行操作
    @Test
    public void test1() {
        User user = null;
        User retUser = new User();
        retUser.setName("aaa");
        retUser.setAge(33);
        Optional.ofNullable(retUser).ifPresent(x->{
            System.out.println(x.getName());
            System.out.println(x.getAge());
        });
    }
  • 判斷對(duì)象是否為空,如果為空則返回默認(rèn)值
   @Test
    public void test2() {
//        User user = new User();
        User user = null;
        User retUser = new User();
        retUser.setName("aaa");
        retUser.setAge(33);
        
        User user1 = Optional.ofNullable(user).orElse(retUser);
        System.out.println(user1);
    }
  • 對(duì)對(duì)象的某一屬性獲取,如果為空則獲取默認(rèn)的,好比返回用戶頭像地址,如果沒有設(shè)置則返回一個(gè)默認(rèn)的頭像地址,如果有則添加地址返回;
 @Test
    public void test3() {
        User user = null;
        User retUser = new User();
        retUser.setName("aaa");
        retUser.setAge(33);

        String lowerName = Optional.ofNullable(user).map(u -> {
            return u.getName();
        }).map(name -> {
            return name.toLowerCase();
        }).orElse("默認(rèn)的名字");

        System.out.println(lowerName);
    }

代碼

import lombok.Data;
import lombok.ToString;
import org.junit.Test;
import java.util.Optional;
public class OptionalTest {
    public static void main(String[] args) {
        User user = new User();
        user.setName("yida");
        user.setAge(18);
        Optional<Object> empty = Optional.empty();
        Optional<User> user1 = Optional.of(user);
        Optional<User> user2 = Optional.ofNullable(user);
    }
    @Test
    public void test1() {
        User user = null;
        User retUser = new User();
        retUser.setName("aaa");
        retUser.setAge(33);
        Optional.ofNullable(retUser).ifPresent(x->{
            System.out.println(x.getName());
            System.out.println(x.getAge());
        });
    }
    @Test
    public void test2() {
        User user = null;
        User retUser = new User();
        retUser.setName("aaa");
        retUser.setAge(33);
        User user1 = Optional.ofNullable(user).orElse(retUser);
        System.out.println(user1);
    }
    @Test
    public void test3() {
        User user = null;
        User retUser = new User();
        retUser.setName("aaa");
        retUser.setAge(33);
        String lowerName = Optional.ofNullable(user).map(u -> {
            return u.getName();
        }).map(name -> {
            return name.toLowerCase();
        }).orElse("默認(rèn)的名字");
        System.out.println(lowerName);
    }
    @Data
    @ToString
    private static class User{
        private String name;
        private Integer age;
    }
}

到此這篇關(guān)于Java中的Optional使用詳細(xì)說明的文章就介紹到這了,更多相關(guān)Java中的Optional內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java Swing JRadioButton單選按鈕具體使用

    Java Swing JRadioButton單選按鈕具體使用

    這篇文章主要介紹了Java Swing JRadioButton單選按鈕具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 解決IDEA中Maven下載依賴包過慢或報(bào)錯(cuò)的問題

    解決IDEA中Maven下載依賴包過慢或報(bào)錯(cuò)的問題

    由于公司項(xiàng)目迭代,越來越多的項(xiàng)目開始轉(zhuǎn)型新版本,由于我對(duì)Java一直不感冒,但要順應(yīng)公司項(xiàng)目要求,遂自己要逐步開始完善Java相關(guān)的知識(shí)層面,此篇是我在學(xué)習(xí)SpringBoot時(shí)對(duì)一些不懂地方及遇到問題時(shí)的記錄,需要的朋友可以參考下
    2024-02-02
  • java面試常見問題之Hibernate總結(jié)

    java面試常見問題之Hibernate總結(jié)

    這篇文章主要介紹了在java面試過程中hibernate比較常見的問題,包括Hibernate的檢索方式,Hibernate中對(duì)象的狀態(tài),Hibernate的3種檢索策略是什么,Session的find()方法以及Query接口的區(qū)別等方面問題的總結(jié),需要的朋友可以參考下
    2015-07-07
  • MybatisPlus處理大表查詢的實(shí)現(xiàn)步驟

    MybatisPlus處理大表查詢的實(shí)現(xiàn)步驟

    在實(shí)際工作中當(dāng)指定查詢數(shù)據(jù)過大時(shí),我們一般使用分頁查詢的方式一頁一頁的將數(shù)據(jù)放到內(nèi)存處理,本文主要介紹了MybatisPlus處理大表查詢的實(shí)現(xiàn)步驟,感興趣的可以了解一下
    2024-08-08
  • Java實(shí)現(xiàn)經(jīng)典捕魚達(dá)人游戲的示例代碼

    Java實(shí)現(xiàn)經(jīng)典捕魚達(dá)人游戲的示例代碼

    《捕魚達(dá)人》是一款以深海狩獵為題材的休閑競(jìng)技游戲。本文將利用Java實(shí)現(xiàn)這一經(jīng)典的游戲,文中采用了swing技術(shù)進(jìn)行了界面化處理,需要的可以參考一下
    2022-02-02
  • java實(shí)現(xiàn)CSV 字段分割

    java實(shí)現(xiàn)CSV 字段分割

    這篇文章主要介紹了java實(shí)現(xiàn)CSV 字段分割的相關(guān)資料,需要的朋友可以參考下
    2015-07-07
  • struts2中類型轉(zhuǎn)換實(shí)例代碼

    struts2中類型轉(zhuǎn)換實(shí)例代碼

    這篇文章主要介紹了struts2中類型轉(zhuǎn)換實(shí)例代碼,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10
  • 淺析fastjson2時(shí)間序列化和反序列化的簡(jiǎn)單使用

    淺析fastjson2時(shí)間序列化和反序列化的簡(jiǎn)單使用

    在項(xiàng)目中將fastjson升級(jí)為fastjson2后,我們遇到了一些與fastjson不完全兼容的問題,所以本文就來探討下fastjson2的時(shí)間序列化和反序列化的簡(jiǎn)單使用吧
    2025-01-01
  • Java實(shí)現(xiàn)創(chuàng)建Zip壓縮包并寫入文件

    Java實(shí)現(xiàn)創(chuàng)建Zip壓縮包并寫入文件

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)創(chuàng)建Zip壓縮包并寫入文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 背包問題-動(dòng)態(tài)規(guī)劃java實(shí)現(xiàn)的分析與代碼

    背包問題-動(dòng)態(tài)規(guī)劃java實(shí)現(xiàn)的分析與代碼

    這篇文章主要給大家介紹了關(guān)于背包問題動(dòng)態(tài)規(guī)劃java實(shí)現(xiàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12

最新評(píng)論