java中Optional使用
程序员文章站
2022-06-07 12:36:53
...
java中Optional使用
文章目录
一、简介
Optional是jdk8引入的,用于处理java中的null。在实际使用,还是比较好用的,这里对常见用法进行介绍。
二、使用
2.1 创建
//创建空的Optional
Optional<String> empOpt = Optional.empty();
//创建不为空的Optional,此时若传为null,则抛空指针异常
Optional<String> opt = Optional.of("hello");
//创建可以为空的Optional
Optional<String> nullOpt = Optional.ofNullable(null);
2.2 取值
2.2.1 get方法
get方法获取非空值,若为空,则抛异常NoSuchElementException。
//get方法获取非空值,若为空,则抛异常NoSuchElementException
System.out.println(opt.get()); //hello
2.2.2 orElse方法
orElse方法,若不为空,返回原值,否则返回指定值。
//orElse方法,若不为空,返回原值,否则返回指定值
System.out.println(opt.orElse("default")); //hello
System.out.println(nullOpt.orElse("default")); //default
2.2.3 orElseGet方法
orElseGet方法,若不为空,返回原值,否则返回Supplier中get方法生成值。
//orElseGet方法,若不为空,返回原值,否则返回Supplier中get方法生成值
Supplier<String> sup = () -> "default";
System.out.println(opt.orElseGet(sup)); //hello
System.out.println(nullOpt.orElseGet(sup)); //default
2.2.4 orElseThrow方法
orElseThrow方法,若不为空,返回原值,否则返回Supplier中get方法生成的异常。
//orElseThrow方法,若不为空,返回原值,否则返回Supplier中get方法生成的异常
Supplier<Exception> exSup = () -> new RuntimeException("null error");
System.out.println(opt.orElseThrow(exSup)); //hello
System.out.println(nullOpt.orElseThrow(exSup)); //抛异常
2.3 存在时执行
ifPresent方法,当值非空时,执行Consumer对象,否则不执行。
//ifPresent方法,当值非空时,执行Consumer对象,否则不执行
opt.ifPresent(System.out::println); //hello
nullOpt.ifPresent(System.out::println); //无输出
2.4 存在时过滤
//filter方法,当对象非null同时满足过滤条件Predicate,则返回原对象Optional,否则返回空Optional。
//filter方法,当对象非null同时满足过滤条件Predicate,则返回原对象Optional,否则返回空Optional
opt.filter(t->t.contains("h")).ifPresent(System.out::println); //hello
nullOpt.filter(t->t.contains("h")).ifPresent(System.out::println); //无输出
2.5 存在时转换
2.5.1 map方法
map方法,当对象非null时执行Function,否则返回空Optional。
//map方法,当对象非null时执行Function,否则返回空Optional
Function<String, String> fun = t -> t + ".";
opt.map(fun).ifPresent(System.out::println); //hello.
2.5.2 flatMap方法
flatMap方法类似map,只是Function函数返回为Optional类型,当对象非null时执行Function对象,否则返回空
//flatMap方法类似map,只是Function函数返回为Optional类型,当对象非null时执行Function对象,否则返回空Optional
Function<String, Optional<String>> optFun = t -> Optional.ofNullable(t + ".");
opt.flatMap(optFun).ifPresent(System.out::println); //hello.
上一篇: GO语言查询指定年份指定月份有多少天