亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

簡(jiǎn)介

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

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

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

Optional的使用

首先看看Optional的方法:

在這里插入圖片描述

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

  • Optional.empty()

返回一個(gè)空的Optional,用的不多;主要就是為了使Optional只存在有值和無(wú)值的情況,不存在包含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)
    • 沒(méi)有返回值,傳入的是一個(gè)函數(shù),如果存在執(zhí)行函數(shù),不存在則不執(zhí)行
  • filter(Predicate<? super T> predicate)
    • filter 方法接受一個(gè) Predicate 來(lái)對(duì) Optional 中包含的值進(jìn)行過(guò)濾,如果包含的值滿足條件,那么還是返回這個(gè) Optional;否則返回 Optional.empty。
  • map(Function<? super T, ? extends U> mapper)
    • 對(duì)該值執(zhí)行提供的 get方法調(diào)用。
  • flatMap(Function<? super T, Optional> mapper)
    • 同上,只不過(guò)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)的,好比返回用戶頭像地址,如果沒(méi)有設(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ì)說(shuō)明的文章就介紹到這了,更多相關(guān)Java中的Optional內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JS+Struts2多文件上傳實(shí)例詳解

    JS+Struts2多文件上傳實(shí)例詳解

    這篇文章主要為大家詳細(xì)介紹了JS+Struts2多文件上傳實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Java簡(jiǎn)單實(shí)現(xiàn)SpringMVC+MyBatis分頁(yè)插件

    Java簡(jiǎn)單實(shí)現(xiàn)SpringMVC+MyBatis分頁(yè)插件

    自己最近搭建的一個(gè)SpringMVC+Mybatis的框架 屬于無(wú)實(shí)體類的框架 并實(shí)現(xiàn)了Myabtis的自動(dòng)分頁(yè)和總數(shù)查詢 只要傳入分頁(yè)參數(shù)便能自動(dòng)查詢總數(shù)和分頁(yè) 總數(shù)封裝在參數(shù)里面執(zhí)行查詢后可以直接從參數(shù)中獲取
    2015-09-09
  • springboot+vue實(shí)現(xiàn)頁(yè)面下載文件

    springboot+vue實(shí)現(xiàn)頁(yè)面下載文件

    這篇文章主要為大家詳細(xì)介紹了springboot+vue實(shí)現(xiàn)頁(yè)面下載文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • java智能問(wèn)答圖靈機(jī)器人AI接口(聚合數(shù)據(jù))

    java智能問(wèn)答圖靈機(jī)器人AI接口(聚合數(shù)據(jù))

    這篇文章主要介紹了java智能問(wèn)答圖靈機(jī)器人AI接口(聚合數(shù)據(jù)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Spring基于XML配置AOP詳解

    Spring基于XML配置AOP詳解

    這篇文章主要介紹了Spring基于XML配置AOP詳解,Spring 的 AOP 功能是基于 AspectJ 實(shí)現(xiàn)的,支持使用 XML 方式定義 AOP 切面,Spring 項(xiàng)目使用 AOP 功能需要定義三個(gè)部分:切面、切點(diǎn)和通知,需要的朋友可以參考下
    2023-09-09
  • 關(guān)于Java中靜態(tài)代碼塊的執(zhí)行淺析

    關(guān)于Java中靜態(tài)代碼塊的執(zhí)行淺析

    這篇文章主要給大家介紹了關(guān)于Java中靜態(tài)代碼塊執(zhí)行的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • java集合collection接口與子接口及實(shí)現(xiàn)類

    java集合collection接口與子接口及實(shí)現(xiàn)類

    這篇文章主要介紹了java集合collection接口與子接口及實(shí)現(xiàn)類,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-07-07
  • Java經(jīng)典設(shè)計(jì)模式之策略模式原理與用法詳解

    Java經(jīng)典設(shè)計(jì)模式之策略模式原理與用法詳解

    這篇文章主要介紹了Java經(jīng)典設(shè)計(jì)模式之策略模式,簡(jiǎn)單說(shuō)明了策略模式的概念、原理并結(jié)合實(shí)例形式分析了java策略模式的具有用法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-08-08
  • Java基礎(chǔ)之面向?qū)ο髾C(jī)制(多態(tài)、繼承)底層實(shí)現(xiàn)

    Java基礎(chǔ)之面向?qū)ο髾C(jī)制(多態(tài)、繼承)底層實(shí)現(xiàn)

    這篇文章主要介紹了Java基礎(chǔ)之面向?qū)ο髾C(jī)制(多態(tài)、繼承)底層實(shí)現(xiàn),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Springboot Thymeleaf實(shí)現(xiàn)HTML屬性設(shè)置

    Springboot Thymeleaf實(shí)現(xiàn)HTML屬性設(shè)置

    這篇文章主要介紹了Springboot Thymeleaf實(shí)現(xiàn)HTML屬性設(shè)置,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2007-11-11

最新評(píng)論