Optional

从 Java 8 引入的一个很有趣的特性是 Optional  类。Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException) —— 每个 Java 程序员都非常了解的异常。

使用  of() 和 ofNullable() 方法创建包含值的 Optional。两个方法的不同之处在于如果你把 null 值作为参数传递进去,of() 方法会抛出 NullPointerException:因此,你应该明确对象不为 null  的时候使用 of(),如果对象即可能是 null 也可能是非 null,你就应该使用 ofNullable() 方法.

访问 Optional 对象的值 =======>Optional 实例中取回实际值对象的方法之一是使用 get() 方法。

验证是否有值========》Optional.ofNullable(),检查是否有值的另一个选择是 ifPresent() 方法。该方法除了执行检查,还接受一个Consumer(消费者) 参数,如果对象不是空的,就对执行传入的 Lambda 表达式。

返回默认值========》orElse(),它的工作方式非常直接,如果有值则返回该值,否则返回传递给它的参数值。

                                            orElseGet() —— 其行为略有不同。这个方法会在有值的时候返回值,如果没有值,它会执行作为参数传入的 Supplier(供应者) 函数式接口

返回异常                        orElseThrow()   它会在对象为空的时候抛出异常,而不是返回备选的值:

 

转换值    map() 和 flatMap() -----》 String email = Optional.ofNullable(user.map(u -> u.getEmail()).orElse("default@gmail.com");

过滤值  filter() 接受一个 Predicate 参数,返回测试结果为 true 的值。如果测试结果为 false,会返回一个空的 Optional

 

Java 9 为 Optional 类添加了三个方法:or()ifPresentOrElse() 和 stream()

or() 方法与 orElse() 和 orElseGet() 类似,它们都在对象为空的时候提供了替代情况。or() 的返回值是由 Supplier 参数产生的另一个 Optional 对象。

 

stream() 方法,它通过把实例转换为 Stream 对象

 

本质上,这是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为空。

方法                                     描述
of                             把指定的值封装为Optional对象,如果指定的值为null,则抛出NullPointerException
empty                       创建一个空的Optional对象
ofNullable                 把指定的值封装为Optional对象,如果指定的值为null,则创建一个空的Optional对象
get                            如果创建的Optional中有值存在,则返回此值,否则抛出NoSuchElementException
orElse                       如果创建的Optional中有值存在,则返回此值,否则返回一个默认值
orElseGet                  如果创建的Optional中有值存在,则返回此值,否则返回一个由Supplier接口生成的值
orElseThrow              如果创建的Optional中有值存在,则返回此值,否则抛出一个由指定的Supplier接口生成的异常
filter                            如果创建的Optional中的值满足filter中的条件,则返回包含该值的Optional对象,否则返回一个空的Optional对象
map                            如果创建的Optional中的值存在,对该值执行提供的Function函数调用
flagMap                      如果创建的Optional中的值存在,就对该值执行提供的Function函数调用,返回一个Optional类型的值,否则就返回一个空的Optional对象
isPresent                    如果创建的Optional中的值存在,返回true,否则返回false
ifPresent                     如果创建的Optional中的值存在,则执行该方法的调用,否则什么也不做

posted @ 2021-05-12 20:57  KLAPT  阅读(117)  评论(0编辑  收藏  举报