美文网首页
Optional容器类的常用方法

Optional容器类的常用方法

作者: 阿杰_96c5 | 来源:发表于2022-03-04 10:01 被阅读0次

Optional容器类的常用方法

说明

方法 描述
empty 放回一个值为空的Optional实例
filter 如果值存在并且满足提供的谓词,就返回包含该Optional对象;否则返回一个空的Optional对象
flatMap 如果值存在,就对该值执行提供的mapping函数,返回mapping函数返回值,flatMap不会使用Optional包装Function执行的返回结果
get 如果值存在就返回该Optional对象,否则就抛出一个 NoSuchElementException异常
ifPresent 如果值存在就对该值执行传入的方法,否则就什么也不做
isPresent 如果值存在就返回true,否则就返回false
map 如果值存在,就对该值执行提供的mapping函数调用,将mapping函数返回值用Optional封装并返回
of 如果传入的值存在,就返回包含该值的Optional对象,否则就抛出NullPointerException异常
ofNullable 如果传入的值存在,就返回包含该值的Optional对象,否则返回一个空的Optional对象
orElse 如果值存在就将其值返回,否则返回传入的默认值
orElseGet 如果值存在就将其值返回,否则返回一个由指定的Supplier接口生成的值
orElseThrow 如果值存在就将其值返回,否则返回一个由指定的Supplier接口生成的异常

常用示例

// 1、Optional.of(T t): 创建一个Optional实例 不能传null
Optional<Employee> op1 = Optional.of(new Employee());

// 2、Optional.empty():创建一个空的Optional实例
Optional<Employee> op2 = Optional.empty();

// 3、Optional.ofNullable(Tt):若t不为nul1,创建Optional实例,否则创建空实例
Optional<Employee> op3 = Optional.ofNullable(new Employee());
// 4、isPresent():判断是否包含值
if (op3.isPresent()) {
    System.out.println(op3.get());
}
// 5、ifPresent(Consumer c):如果值存在就对该值执行传入的方法
op3.ifPresent(System.out::println);

// 6、orElse(Tt):如果调用对象包含值,返回该值,否则返回t
Employee employee = op3.orElse(new Employee(11, "aaaa"));
System.out.println(employee);
Optional.ofNullable(list).orElse(Collections.emptyList());

// 7、orElseGet(Supplier s):如果调用对象包含值,返回该值,否则返回s获取的值
Employee employee2 = op3.orElseGet(() -> new Employee());
System.out.println(employee2);

// 8、map(Function f):如果有值对其处理,并返回处理后的Optional,否则返回Optional.empty()
Optional<Employee> op4 = Optional.ofNullable(new Employee(1, "张三"));
Optional<Integer> map = op4.map(e -> e.getAge());
System.err.println(map.get());

// 9、flatMap(Function mapper):与map类似,要求返回值必须是Optional
Optional<Employee> op5 = Optional.ofNullable(new Employee(1, "张三"));
Optional<String> flatMap = op5.flatMap(e -> Optional.of(e.getName()));
System.err.println(flatMap.get());

admin   web服务入口   包含 framework,quartz,generator 
framework框架核心   包含 system
system系统模块      包含  common通用工具 
generator代码生成   包含 common通用工具 
quartz定时任务      包含 common通用工具 
common通用工具

common通用工具 --> system系统模块  --> framework框架核心 --> web服务入口

Optional 常用优化代码方式

判空取值优化前

if(null == obj)
if(null == user.getName() || "".equals(user.getName()))

if (order != null) {
    Logistics logistics = order.getLogistics();
    if(logistics != null){
        Address address = logistics.getAddress();
        if (address != null) {
            Country country = address.getCountry();
            if (country != null) {
                Isocode isocode = country.getIsocode();
                if (isocode != null) {
                    return isocode.getNumber();
                }
            }
        }
    }
}

判空取值优化后

 String result = Optional.ofNullable(order)
      .flatMap(order->order.getLogistics())
      .flatMap(logistics -> logistics.getAddress())
      .flatMap(address -> address.getCountry())
      .map(country -> country.getIsocode())
      .orElse(Isocode.CHINA.getNumber());

不要返回 null

当你不确定你提供的东西,是不是为空的时候,一个好的习惯是不要返回 null,否则调用者的代码将充满了 null 的判断。我们要把 null 消灭在萌芽中。

public Optional<String> getUserName() {
    return Optional.ofNullable(userName);
}

尽量的少使用 Optional 的 get 方法

Optional<String> userName = "xjjdog";
String defaultEmail = userName.get() == null ? "":userName.get() + "@xjjdog.cn";

应该修改成这样的方式

Optional<String> userName = "xjjdog";
String defaultEmail = userName
    .map(e -> e + "@xjjdog.cn")
    .orElse("");

相关文章

  • Optional容器类的常用方法

    Optional容器类的常用方法 说明 方法描述empty放回一个值为空的Optional实例filter如果值存...

  • 4. Java8 Optional 容器类

    Optional容器类 用于尽量避免空指针异常 1.方法 静态方法 实例 empty 其他常用方法

  • 5.Java8新特性 - Optional容器类

    一.Optional简介 Optional是一个容器类,代表一个值存在或者不存在,可以避免空指针异常 二.常用方法...

  • Optional类

    一、Optional类创建 二、常用方法

  • 集合

    1. 常用容器类 Collection 的常用方法 List 的常用方法 Set 的常用方法 Map 的常用方法 ...

  • orElse和orElseGet

    orElse和orElseGet作为Optional类的两个常用方法,都表示当Optional对象里面的值为空的时...

  • Optional容器类

    Optional类是一个容器类,代表一个值存在或不存在,原来用null表示一个值不存在,现在Optional...

  • Optional容器类

    三人行必有我师,人生是需要不断学习的,在这里我们相遇就是缘分,希望各位可以看完这篇文章,也欢迎大家在下面留言...

  • Optional类

    Optional类为Java8新引入的一个类,Optional是一个可以为null的容器对象,Optional中的...

  • Optional——java8 新特性(4)

    一、概述   Optional 类 ( java.util.Optional )是一个容器类,代表一个值存在...

网友评论

      本文标题:Optional容器类的常用方法

      本文链接:https://www.haomeiwen.com/subject/jeiprrtx.html