Chao's Blog Chao's Blog
首页
  • vue

    • vue路由
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • java
  • spring
  • springboot
  • springcloud
  • git
  • maven
  • nginx
  • tomcat
  • springmvc
  • jvm
  • 图数据库
  • mysql数据库
  • redis数据库
  • windows下docker安装nginx并挂载目录
  • linux命令
  • linux安装软件
  • linux脚本
  • idea
  • vscode
  • 归档
  • 综合项目

    • 若依项目
    • mall项目
  • java
  • mybatis
  • xxl-job
  • mybatis
GitHub (opens new window)

~chao

永远菜鸟,不断努力~
首页
  • vue

    • vue路由
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • java
  • spring
  • springboot
  • springcloud
  • git
  • maven
  • nginx
  • tomcat
  • springmvc
  • jvm
  • 图数据库
  • mysql数据库
  • redis数据库
  • windows下docker安装nginx并挂载目录
  • linux命令
  • linux安装软件
  • linux脚本
  • idea
  • vscode
  • 归档
  • 综合项目

    • 若依项目
    • mall项目
  • java
  • mybatis
  • xxl-job
  • mybatis
GitHub (opens new window)
  • java

    • java深度克隆
    • restemplate

    • hashcode()和equals()的作用、区别、联系
    • java8新特性
    • 接口与抽象类
    • java深度克隆工具类支持对象和list克隆
    • 子线程执行10次后,主线程再运行5次,这样交替执行三遍
    • CountDownLatch的理解和使用
    • CAS详解
    • java中的各种锁详细介绍
    • java线程池
    • Java锁之偏向级锁、轻量级锁、重量级锁
    • Transactional注解与try{}catch(Exception e){}同时使用事务控制无效问题
    • JAVA8 optional用法
      • CyclicBarrier 使用详解
      • Semaphore 使用及原理
      • Java中七大垃圾回收器
    • spring

    • springboot

    • springcloud

    • git

    • maven

    • nginx

    • tomcat

    • springmvc

    • jvm

    • 正则表达式

    • 消息中间件

    • python

    • 后端
    • java
    ~chao
    2023-02-16
    目录

    JAVA8 optional用法

    # JAVA8 optional用法

    public class Test2 {
        public static void main(String[] args) {
            //创建 Optional 实例,也可以通过方法返回值得到。
            Optional<String> name = Optional.of("Sanaulla");
            //创建没有值的 Optional 实例,例如值为'null'
            Optional empty = Optional.ofNullable(null);
            //isPresent 方法用来检查 Optional 实例是否有值。
            if (name.isPresent()) {
            //调用 get()返回 Optional 值。
                System.out.println(name.get());
            }
            try {
                //在 Optional 实例上调用 get()抛出 NoSuchElementException。
                System.out.println(empty.get());
            } catch (NoSuchElementException ex) {
                System.out.println(ex.getMessage());
            }
            //ifPresent 方法接受 lambda 表达式参数。
            //如果 Optional 值不为空,lambda 表达式会处理并在其上执行操作。
            name.ifPresent((value) -> {
                System.out.println("The length of the value is: " + value.length());
            });
            //如果有值 orElse 方法会返回 Optional 实例,否则返回传入的错误信息。
            System.out.println(empty.orElse("There is no value present!"));
            System.out.println(name.orElse("There is some value!"));
            //orElseGet 与 orElse 类似,区别在于传入的默认值。
            //orElseGet 接受 lambda 表达式生成默认值。
            System.out.println(empty.orElseGet(() -> "Default Value"));
            System.out.println(name.orElseGet(() -> "Default Value"));
            try {
            //orElseThrow 与 orElse 方法类似,区别在于返回值。
            //orElseThrow 抛出由传入的 lambda 表达式/方法生成异常。
                //此处为手动写的异常,不做扩展
                //empty.orElseThrow(ValueAbsentException::new);
            } catch (Throwable ex) {
                System.out.println(ex.getMessage());
            }
            //map 方法通过传入的 lambda 表达式修改 Optonal 实例默认值。
            //lambda 表达式返回值会包装为 Optional 实例。
            Optional<String> upperName = name.map((value) -> value.toUpperCase());
            System.out.println(upperName.orElse("No value found"));
            //flatMap 与 map(Funtion)非常相似,区别在于 lambda 表达式的返回值。
    
            //map 方法的 lambda 表达式返回值可以是任何类型,但是返回值会包装成 Optional 实例。
            //但是 flatMap 方法的 lambda 返回值总是 Optional 类型。
            upperName = name.flatMap((value) -> Optional.of(value.toUpperCase()));
            System.out.println(upperName.orElse("No value found"));
            //filter 方法检查 Optiona 值是否满足给定条件。
            //如果满足返回 Optional 实例值,否则返回空 Optional。
            Optional<String> longName = name.filter((value) -> value.length() > 6);
            System.out.println(longName.orElse("The name is less than 6 characters"));
            //另一个示例,Optional 值不满足给定条件。
            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"));
        }
    }
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    编辑 (opens new window)
    上次更新: 2024/01/26, 05:03:22
    Transactional注解与try{}catch(Exception e){}同时使用事务控制无效问题
    CyclicBarrier 使用详解

    ← Transactional注解与try{}catch(Exception e){}同时使用事务控制无效问题 CyclicBarrier 使用详解→

    最近更新
    01
    python使用生成器读取大文件-500g
    09-24
    02
    Windows环境下 Docker Desktop 安装 Nginx
    04-10
    03
    使用nginx部署多个前端项目(三种方式)
    04-10
    更多文章>
    Theme by Vdoing | Copyright © 2022-2024 chaos | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式