zoukankan      html  css  js  c++  java
  • JAVA 8 新特性 __ Optional 类

    1. Optional 类是一个可以作为null容器的对象,若值存在调用isPresent()就返回 true,调用get()会返回该对象。

    2. Optional是一个容器,可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,我们可以不用那么拙劣的检测空值。

    3. 使用Option可以很好解决的NPE

    类声明

    public final class Optional<T> extends Object()
    

    类方法

    I、of

    返回一个指定非null的Optional值

    //调用工厂创建Optional的实例
    Optional<String> name = Optional.of("孙舒蕊");
    //传入参数为Null,抛出NPE
    Optional<String> someNull = Optional.of(null);
    

    II、ofNullable

    为指定的值创建一个Optional,如果指定的值为null,则返回一个空的Optional。

    ofNullable 与 of 的方法相似,唯一的区别是可以接受参数为null的情况。

    //创建一个不包含任何值得Optional
    Optional empty = Optional.ofNullable(null);
    

    III、ifPresent

    如果Optional实例有值则为其调用 consumer,否则不做处理

    如果Optional实例有值,调用ifPresent()可以接受接口或lambda表达式。

    name.ifPresent((value) -> {
        System.out.println("===="+value.length());
    })
    

    VI、orElse

    如果有值则将其返回,否则返回指定的其他的值

    如果Optional实例有值则将其返回,否则返回orElse的方法参数。

    //如果值不为null,orElse方法返回Optional实例的值。
    //如果为null,返回传入的消息。
    //输出:There is no value present!
    System.out.println(empty.orElse("There is no value present!"));
    //输出:Sanaulla
    System.out.println(name.orElse("There is some value!"));
    

    V、orElseGet

    orElseGet与orElse方法类似,区别在于得到的默认值。orElse方法将传入的字符串作为默认值,orElseGet方法可以接受Supplier接口的实现用来生成默认值。

    //orElseGet与orElse方法类似,区别在于orElse传入的是默认值,
    //orElseGet可以接受一个lambda表达式生成默认值。
    //输出:Default Value
    System.out.println(empty.orElseGet(() -> "Default Value"));
    //输出:Sanaulla
    System.out.println(name.orElseGet(() -> "Default Value"));
    

    VI、map

    如果有值,则对其执行调用mapping函数得到返回值。如果返回值不为null,则创建包含mapping返回值的Optional作为map方法返回值,否则返回空Optional。

    //map方法执行传入的lambda表达式参数对Optional实例进行修改
    //为lambda表达式的返回值创建新的Optional实例作为 map 的方法返回值
    Optional<String> upperName= name.map((vlaue) -> value.toUpperCase());
    System.out.println(upperName.orElse("  "));
    

    VII、flatMap

    如果有值,为其执行mapping函数返回值,否则返回空的Optional。flatMap和map(Function) 方法类似,区别在于flatMap中的mapper返回值必须是Optional。调用结束时,flatMap不会结果用Optional封装。

    flatMap方法与map方法类似,区别在于mapping函数的返回值不同 。map方法的mapping函数返回值可以使任何类型T,而flatMap方法的参数map函数,使用flatMap重写的示例如下。

    //flatMap 与 map(Function) 非常类似,区别在于传入方法的lambda表达式的返回值类型
    //map方法中的lambda表达式的返回值是可以任意类型的,在map函数返回之前会包装成Optional,
    //但是flatMap方法中的lambda表达式返回值必须是Optional的实例
    upperName=name.flatMap((value) -> Optional.of(value.toUpperCase()));
    System.out.println(upperName.orElse("No value found"));
    //输出SANAULLA
    

    VIII、filter

    //filter方法检查给定的Optional值是否满足某些条件
    //如果满足返回一个Optional实例,否则返回空的Optional
    Optional<String> name=Optional.of("Christina");
    Optional<String> longName=name.filter((value) -> value.length() > 6);
    System.out.println(longName.orElse("这个人的名字没有六个字符大1"));
    //下面的例子不满足
    Optional<String> anotherName=Optional.of("Sana");
    Optional<String> shortName=anotherName.filter((value) -> value.length()>6);
    System.out.println(shortName.orElse("这个人的名字没有六个字符大2"));
    
    ===================输出================================
    Christina 
    这个人的名字没有六个字符大2
    
  • 相关阅读:
    抓取csdn上的各类别的文章 (制作csdn app 二)
    Android 使用Fragment,ViewPagerIndicator 制作csdn app主要框架
    MongoDB基本使用
    MongoDB之DBref(关联插入,查询,删除) 实例深入
    nginx 1.4.7 发送日志到rsyslog
    nginx 编译参数
    nginx 编译参数
    rsyslog 传输日志
    rsyslog 传输日志
    rsyslog 直接读取日志,当日志截断后,不会继续发送
  • 原文地址:https://www.cnblogs.com/adrien/p/10715072.html
Copyright © 2011-2022 走看看