美文网首页
Optional类补充

Optional类补充

作者: Teemo_fca4 | 来源:发表于2022-02-07 15:00 被阅读0次
   public static void main(String[] args) {
//        构造方法:
//        Optional.empty(); 构造一个空的Optional对象,Optional里面的value值是null
//        Optional.of(value); 根据传入的value值构造一个Optional对象,如果传入的值是null,那么会抛出异常
//        Optional.ofNullable(value);根据传入的value值构造一个Optional对象,如果传入的值是null,那么返回一个空的Optional对象


        //调用工厂方法创建Optional实例
        Optional<String> name = Optional.of("Sanaulla");
        if(name.isPresent()){//如果Optional内的值不为null 那么isPresent()方法返回true
            System.out.println(name.get());//调用get()方法来返回内部的值
        }

        System.out.println("*********************** 1 ********************************");
        Optional<String> empty = Optional.empty();//生成一个空的Optional对象
        System.out.println(empty.isPresent());//返回false
//        System.out.println(empty.get()); 如果对一个空的Optional对象调用get()方法 那么将抛出异常

        System.out.println("*********************** 2 ********************************");
        //上面的ifPresent方法是空参方案,ifPresent方法也可以接收一个lambda表达式作为参数
        //然后lambda表达式对Optional的值调用consumer进行处理。
        name.ifPresent(value -> System.out.println("输出: " + value) );

        System.out.println("*********************** 3 ********************************");
        //如果有值则将其返回,否则返回输入的值
        System.out.println(empty.orElse("There is no value present!"));//输出:There is no value present!
        System.out.println(name.orElse("There is some value!"));//输出:Sanaulla

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

        System.out.println("*********************** 5 ********************************");
        try {
            //orElseThrow与orElse方法类似。与返回默认值不同
            //如果Optional内的值为null,那么orElseThrow会抛出lambda表达式或方法生成的异常
            empty.orElseThrow(()-> new RuntimeException("我的异常"));
        } catch (Throwable ex) {
            System.out.println(ex.getMessage());//输出: No value present in the Optional instance
        }

        System.out.println("*********************** 6 ********************************");
        //map方法用来对Optional实例的值执行一系列操作(多个操作)
        Optional<String> hahaName = name.map((value) -> {
            value  = value + " 哈哈";
            value  = value + " 呵呵";
            return  value;
        });
        System.out.println( hahaName.orElse("No value found"));


        //flatMap方法与map方法类似,区别在于前者返回的是Optional内的value值,或者需要返回一个Optional对象
        System.out.println("*********************** 7 ********************************");
        hahaName = name.flatMap((value) -> {
            value  = value + " 哈哈";
            value  = value + " 呵呵";
            return Optional.of(value);
        });
        System.out.println( hahaName.orElse("No value found"));



        System.out.println("*********************** 8 ********************************");
        //filter方法检查给定的Option值是否满足某些条件。如果满足则返回同一个Option实例,否则返回空Optional。
        Optional<String> longName = name.filter((value) -> value.length() > 6);
        System.out.println(longName.orElse("The name is less than 6 characters"));//输出Sanaulla

        //另一个例子是Optional值不满足filter指定的条件。
        Optional<String> anotherName = Optional.of("Sana");
        Optional<String> shortName = anotherName.filter((value) -> value.length() > 6);
        System.out.println(shortName.orElse("The name is less than 6 characters"));//输出:name长度不足6字符
    }

相关文章

  • Optional类补充

  • Java 9 改进的 Optional 类

    Optional 类在 Java 8 中引入,Optional 类的引入很好的解决空指针异常。 Optional ...

  • Optional用法

    Optional用法 从 Java 8 引入的一个很有趣的特性是 Optional 类。Optional 类主要...

  • Optional类

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

  • Optional类

    人可能有车,也可能没有车,因此将这个字段声明为Optional。车可能进行了保险,也可能没有保险,所以将这个字段声...

  • Optional 类

    Optional 类 声明:java8新特性系列为个人学习笔记,参考地址点击这里,侵删!! 到目前为止,臭名昭著的...

  • optional类

    简介 首先我们需要明确的是它并 不是对 null 关键字的替代策略,而是对于 null 判定提供了一种更加优雅的实...

  • Optional类

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

  • Optional类

  • Optional 类

网友评论

      本文标题:Optional类补充

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