Optional的常用Api

Optional的常用Api

Optional实际应用

01 Api

  1. Optional.of()该方法的入参是一个非null值,如果该值为null,则抛出NullPointerException,不为Null则返回该值。
  2. Optional.ofNullable()非Null时返回该值,为null时返回一个Optional.empty()
  3. Optional.empty()通过构造方法返回一个空的Optional实例。
  4. boolean isPresent()判断optional实例是否有值,没值为false,有值为true
  5. ifPresentoptiona()l实例存在值时调用ifPresent中的内容
  6. orElse,orElseGet两者的作用是当入参是null时,匹配自定义默认值
  7. orElseThrow,当Optional中为空值时抛出异常
  8. map 映射,用法同Stream
  9. filter 过滤,用法同Stream

orElse,orElseGet的区别

区别:

  • orElse与orElseGet的区别是前者的入参是一个泛型T,后者是一个函数式方法的结果。
  • ofNullable中的值是null时,orElse/orElseGet中的内容会执行,否则不执行

02 测试用例

package com.saiyou.test;

import com.saiyou.entity.User;
import org.apache.poi.hssf.record.UserSViewBegin;

import java.util.Optional;

/**
 * @author : lyn
 * 技术点 :
 * @description:
 * @date : 2022/1/2 17:41
 */
public class OptionalTest {
    public static void main(String[] args) {

        test7();
    }

    /**
     * Optional.of
     * 该方法的入参是一个非null值,如果该值为null,则抛出NullPointerException,不为Null则返回该值。
     */
    private static void test1() {
        // Optional.of(null);
        //入参为null时抛出NullPointerException
        Optional<String> result = Optional.of("value");
        System.out.println(result.get());
        //非null时返回该值value
    }

    /**
     * Optional.ofNullable
     * 非Null时返回该值,为null时返回一个Optional.empty()
     */
    private static void test2() {
        Optional<Object> result = Optional.ofNullable(null);
        //为null时返回一个Optional.empty()
    }

    /**
     * Optional.empty()
     * 通过构造方法返回一个空的Optional实例。
     */
    private static void test3() {
        //通过 boolean isPresent()判断optional实例是否有值,没值为false,有值为true
        Optional.empty().isPresent();
        //没值为false
        System.out.println(Optional.ofNullable("value").isPresent());
        //有值为true
    }

    /**
     * Optional.ifPresent
     * 实例存在值时调用ifPresent中的内容
     */
    private static void test4() {
        //Optional.empty().ifPresent(value-> System.out.println(value));
        //optional没值时不执行 ifPresent()里的代码
        Optional.ofNullable("value").ifPresent(System.out::println);
        //有值时执行 结果:value
    }

    /**
     * orElse,orElseGet两者的作用是当入参是null时,匹配自定义默认值
     * 区别:
     * orElse与orElseGet的区别是前者的入参是一个泛型T,后者是一个函数式方法的结果。
     * ofNullable中的值是null时,orElse/orElseGet中的代码会执行
     * 否则不执行
     */
    private static void test5() {
        String str = null;
        String str1 = "张三";
        str = Optional.ofNullable(str).orElse(str1);
        String str2 = "李四";
        str = Optional.ofNullable(str).orElse(str2);
        System.out.println(str);
        //结果:张三
        str = null;
        str = Optional.ofNullable(str).orElseGet(() -> str2);
        System.out.println(str);
        //结果:李四
    }

    /**
     * orElseThrow
     * 当Optional中为空值时抛出异常
     */
    private static void test6() {
        String value = "value";
        value = Optional.ofNullable(value).orElseThrow(() -> new RuntimeException("参数为空!"));
        System.out.println(value);
        //结果: value

    }

    /**
     * map 映射,用法同Stream
     * filter 过滤,用法同Stream
     */
    private static void test7() {
        User user = new User();
        user.setName("张三");
        Optional.ofNullable(user).map(User::getName).ifPresent(System.out::println);
        //结果: 张三
    }
}

03 资料参考

关于Optional的一些常用API

Optional 应用

posted @ 2022-01-02 21:51  进击的小蔡鸟  阅读(294)  评论(0编辑  收藏  举报