Optional类——Java8新特性

Optional类

从前,为了解决空指针异常,Google公司著名的Guava项目引入了Optional类,Guava通过使用检查空值的方式来防止代码污染,它鼓励程序员写更干净的代码,受到了Google Guava的启发,Optional类已经成为Java8类库中的一部分。

Optional其实是一个容器,他可以保存T的值,或者仅仅保存null。Optional提供很多有用的方法,这样我们就不用显示进行空值检测(if(obj!=null){···})

创建Optional

  • Optional.of(T value));返回一个Optional描述给指定的非null值
  • Optional.ofNullable(T value);返回一个Optional描述的值,如果为空返回一个空的Optional
  • Optional.empty();返回一个空的Optional
        Employee e1 = new Employee("张三",8000);
        Optional<Employee> opt = Optional.ofNullable(e1);
        //如果存在,打印employee,不存在返回空的Optional
        System.out.println(opt);

判断

返回值方法名说明
booleanisPresent()判断是否包含对象
voidifPresent(Consumer<? super T> action)如果有值就执行action,并且该值会作为参数传给它,否则什么都不做
voidifPresentOrElse(Consumer<? super T> action, Runnable emptyAction)如果有值就执行给定的操作,否则执行基于空的给定操作**(JAVA9新增)**

获取

返回值方法名说明
Tget()如果调用对象包含值,返回该值,否则抛出异常
TorElse(T other)如果有值返回该值,否则返回指定other
TorElseGet(Supplier<? extends T> other)如果有值返回该值,否则返回由Supplier接口实现提供的对象
TorElseThrow(Supplier<? extends X> exceptionSupplier)如果有值返回该值,否则抛出由Supplier接口实现提供的异常
Optionalor(Supplier<? extends Optional<? extends T>> supplier)如果值存在返回一个Optional描述的值,否则返回一个 Optiona通过供给函数产生**(JAVA9新增)**
Streamstream()如果有值返回包含该值的Stream,否则返回空Stream**(JAVA9新增)**
        Employee e2 = new Employee();
        Optional<String> opt2 = Optional.ofNullable(e2.getName());
        //如果有名字,返回他的名字,没有返回“无名氏”
        String name = opt2.orElse("无名氏");
        System.out.println("这个员工的名字为:"+name);

操作

返回值方法名说明
Optionalfilter(Predicate<? super T> predicate)如果有值,判断是否符合predicate的条件,否则返回空
Optionalmap(Function<? super T,? extends U> mapper)如果有值,对该值执行Function接口的实现代码,并返回一个Optional的结果,否则报空指针异常
OptionalflatMap(Function<? super T,? extends Optional<? extends U>> mapper)如果有值,返回基于Optional包含的映射方法的值,否则返回一个空的Optional
        Optional<Employee> opt3 = Optional.of(new Employee("李四",5000));
        //如果工资大于10000返回该对象,否则返回空
        Optional<Employee> opt33 = opt3.filter(e->e.getSalary()>10000);
        System.out.println(opt33);

        //为员工工资提高10%(如果opt333不为空)
        Optional<Employee> opt333 = opt3.map(e->{e.setSalary(e.getSalary()*1.1);return e;});
        System.out.println(opt333);

总结:

  • Java8中新增的类
  • Optional主要功能实现空指针检测
  • 不过这个类中提供了很多实用的扩展方法
  • Optional是Java实现函数式编程的强进一步
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值