java中Optional使⽤
java中Optional使⽤
⽂章⽬录
⼀、简介
Optional是jdk8引⼊的,⽤于处理java中的null。在实际使⽤,还是⽐较好⽤的,这⾥对常见⽤法进⾏介绍。⼆、使⽤
2.1 创建
//创建空的Optional
Optional<String> empOpt = pty();
//创建不为空的Optional,此时若传为null,则抛空指针异常
Optional<String> opt = Optional.of("hello");
//创建可以为空的Optional
Optional<String> nullOpt = Optional.ofNullable(null);
2.2 取值get out of
2.2.1 get⽅法
get⽅法获取⾮空值,若为空,则抛异常NoSuchElementException。
//get⽅法获取⾮空值,若为空,则抛异常NoSuchElementException
System.out.());//hello
2.2.2 orElse⽅法
orElse⽅法,若不为空,返回原值,否则返回指定值。
//orElse⽅法,若不为空,返回原值,否则返回指定值
System.out.Else("default"));//hello
System.out.Else("default"));//default
2.2.3 orElseGet⽅法
orElseGet⽅法,若不为空,返回原值,否则返回Supplier中get⽅法⽣成值。
//orElseGet⽅法,若不为空,返回原值,否则返回Supplier中get⽅法⽣成值
Supplier<String> sup =()->"default";
System.out.ElseGet(sup));//hello
System.out.ElseGet(sup));//default
2.2.4 orElseThrow⽅法
orElseThrow⽅法,若不为空,返回原值,否则返回Supplier中get⽅法⽣成的异常。
//orElseThrow⽅法,若不为空,返回原值,否则返回Supplier中get⽅法⽣成的异常
Supplier<Exception> exSup =()->new RuntimeException("null error");
System.out.ElseThrow(exSup));//hello
System.out.ElseThrow(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-&ains("h")).ifPresent(System.out::println);//hello
nullOpt.filter(t-&ains("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.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。