Optional的常用Api


Optional的常用Api

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 资料参考

https://blog.csdn.net/weixin_42313773/article/details/118192675

https://bbs.csdn.net/skill/java/java-200100112c1048058e39283469c5a1c2