zoukankan      html  css  js  c++  java
  • 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中的值存在,则执行该方法的调用,否则什么也不做

  • 相关阅读:
    Android中Bitmap对象和字节流之间的相互转换
    Android 6.0以后的版本报错:open failed: EACCES (Permission denied)
    C#—ASP.NET:集成极光推送(Push API v3)
    极光推送(C#)
    模仿今日头条导航栏滑动显示更多
    使用VMWare虚拟mac系统,设置网络的正确姿势
    vmware panic(CPU 0 caller 0x)launchd exited
    VMware15安装MAC(MAC OS 10.13)(OS X 10.14)原版可升级最新可解锁macOS Unlocker3.0(OS X 10.13)
    Flutter Dart List.map() 获取下标
    Flutter利用GridView实现网格的商品布局
  • 原文地址:https://www.cnblogs.com/KL2016/p/14761683.html
Copyright © 2011-2022 走看看