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