Optional类可以更友好的处理null问题,将if(xxx == null)等类似代码变得更简洁;
Optional类包含的内容:(jdk1.8)
Optional类构造方法都是私有的,只能通过Optional类提供的三个静态方法构造:
判断两个Optional是否相等,相等条件:前提两边都是Optional实例,两边值都为空值或者两边值的equals()相等;
value是空值返回“Optional.empty”,否则返回“Optional[value值]”;
返回value的值,value不存在抛出NoSuchElementException异常;
返回value的值,value不存在返回other;
返回value的值,value不存在返回指定Supplier接口返回的值,value不存在且supplier为null抛出空指针异常;
返回value的值,value不存在抛出supplier指定的异常,value不存在且supplier为null抛出空指针异常;
判断value值是否存在,存在返回true,不存在返回false;
如果值存在则执行consumer,值存在且consumer为null时抛出空指针异常;
对value进行映射,返回映射后的Optional实例,如果mapper返回null则映射为空的Optional实例,mapper为null抛出空指针异常;
跟map基本一样,不过mapper需返回一个Optional对象,mapper为null或者返回null都将抛出空指针异常;
如果值存在并且符合predicate条件则返回当前Optional,否则返回一个空的Optional实例,predicate为null抛出空指针异常;
jdk9新增,如果值存在则执行action,否则执行emptyAction,值存在且action为null或者值不存在切emptyAction为null都将抛出空指针异常;
jdk11新增,判断值是否不存在,空值返回true,非空值返回false;(跟isPresent()相反)
jdk9新增,跟orElseGet基本一样,只是返回值不同,supplier也需返回Optional对象;
jdk10新增,值存在返回该Optional对象,否则返回NoSuchElementException异常;
jdk9新增,将Optional转换成steam对象;
小demo:
/**
* 2022年1月6日下午2:25:25
*/
package testOptional;
import java.util.Optional;
/**
* @author XWF
*
*/
public class TestOptional {
/**
* @param args
*/
public static void main(String[] args) {
Optional<String> opt = Optional.empty();
System.out.println("isEmpty:" + opt.isEmpty());
System.out.println("isPresent:" + opt.isPresent());
opt.ifPresentOrElse(x -> System.out.println("opt=" + x), () -> System.out.println("opt不存在"));
System.out.println(opt.orElse("abc"));
System.out.println(opt.or(() -> Optional.of("DEF")).map(String::toLowerCase));
System.out.println("===========================");
opt = Optional.of("XYZ");
opt.ifPresent(x -> System.out.println(x + x));
System.out.println(opt.filter(x -> x.length() > 5));
System.out.println(opt.filter(x -> x.length() <= 5));
opt.stream().forEach(System.out::println);
}
}
执行结果:
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/FlyLikeButterfly/article/details/122343046
内容来源于网络,如有侵权,请联系作者删除!