Optional 常用方法总结

简介: Optional 常用方法总结

转载请注明出处:

  Optional 类是 JAVA 8 提供的判断程序是否为空提供的包装工具类;可以减少代码中的 是否为空的判断,以及减少 NullPointerExceptions;使得程序变得更为健壮;有助于创建简单、可读性更强、比对应程序错误更少的程序。

Optional 常用的方法总结:

  • empty : 创建一个空的Optional对象
  • of:为非null的值创建一个Optional。of方法通过工厂方法创建Optional类。需要注意的是,创建对象时传入的参数不能为null。如果传入参数为null,则抛出NullPointerException。因此不经常用。
  • ofNullable:为指定的值创建一个Optional,如果指定的值为null,则返回一个空的Optional。
  • isPresent: 检查一个Optional对象中是否有值,只有值非空才返回truex,否则返回false。
  • ifPresent:如果Optional实例有值则为其调用consumer,否则不做处理
  • get:如果Optional有值则将其返回,否则抛出NoSuchElementException。因此也不经常用。
  • orElse:如果有值则将其返回,否则返回指定的其它值。经常用于判断返回默认值的场景;
  • orElseGet:orElseGet与orElse方法类似,区别在于得到的默认值。orElse方法将传入的字符串作为默认值,orElseGet方法可以接受Supplier接口的实现用来生成默认值
  • orElseThrow:如果有值则将其返回,否则抛出supplier接口创建的异常。
  • filter: 接收一个函数式接口 ,如果有值并且满足断言条件返回包含该值的Optional,否则返回空Optional。
  • map:如果有值,则对其执行调用mapping函数得到返回值。如果返回值不为null,则创建包含mapping返回值的Optional作为map方法返回值,否则返回空Optional。
  • flatMap:如果有值,为其执行mapping函数返回Optional类型返回值,否则返回空Optional。

 

通过示例查看 optional 带来的好处

  示例一

    根据用户的对象获取用户的名称,如果存在则返回用户名称,没有则返回 unknown ;没有使用 Option 的 Java 实现代码如下:

public static String getName2(User user){
        if (user!=null){
            String name = user.getName();
            if (StringUtils.isBlank(name)){
                return "unKnown";
            }
            return name;
        }
        return "unKnown";
    }

    没有使用Optional 时,需要不断的判断是否为空,降低了代码的可读性和维护性,使用 Optional 之后,代码如下:

public static String getName(User user){
        return  Optional.ofNullable(user).map(p->p.getName()).orElse("unKnown");
    }

    使用Optional 之后,通过一行便完成了 上述的功能,减少了层层的 if 判断

  示例 二

    从一批学生中,选出年龄大于等于18,参加过考试并且成绩大于80的人去参加比赛。

public void useJava8() {
    List<Student> studentList = initData();
    for (Student student : studentList) {
        Optional<Student> studentOptional = Optional.of(student);
        Integer score = studentOptional.filter(s -> s.getAge() >= 18).map(Student::getScore).orElse(0);
 
        if (score > 80) {
            System.out.println("入选:" + student.getName());
        }
    }
}

 

标签: java

目录
相关文章
IDEA2023激活码,附安装步骤
失效请看:docs.qq.com/doc/DVHhaSHZCaFJKd0Rq
946 1
|
存储 SQL Java
Java8 stream 中利用 groupingBy 进行多字段分组求和
Java8 stream 中利用 groupingBy 进行多字段分组求和
|
Linux Windows
IDEA如何查看每一行代码的提交记录(人员,时间)
【9月更文挑战第24天】在IntelliJ IDEA中,可通过安装GitToolBox插件并利用其功能来便捷地查看每行代码的提交记录,包括提交者、时间和提交信息。具体操作为:首先安装GitToolBox插件,然后在代码编辑区域将鼠标悬停于目标代码行以查看简要信息,或使用快捷键打开“Version Control”窗口查看详细提交历史。
5621 2
|
8月前
YOLOv11改进策略【模型轻量化】| 替换骨干网络为 GhostNet V3 2024华为的重参数轻量化模型
YOLOv11改进策略【模型轻量化】| 替换骨干网络为 GhostNet V3 2024华为的重参数轻量化模型
451 18
YOLOv11改进策略【模型轻量化】| 替换骨干网络为 GhostNet V3 2024华为的重参数轻量化模型
|
设计模式 Java
结合HashMap与Java 8的Function和Optional消除ifelse判断
`shigen`是一位致力于记录成长、分享认知和留住感动的博客作者。本文通过具体代码示例探讨了如何优化业务代码中的if-else结构。首先展示了一个典型的if-else处理方法,并指出其弊端;然后引入了策略模式和工厂方法等优化方案,最终利用Java 8的Function和Optional特性简化代码。此外,还提到了其他几种消除if-else的方法,如switch-case、枚举行、SpringBoot的IOC等。一起跟随shigen的脚步,让每一天都有所不同!
133 10
结合HashMap与Java 8的Function和Optional消除ifelse判断
|
Android开发 数据安全/隐私保护 iOS开发
ios和安卓测试包发布网站http://fir.im的注册与常用功能
ios和安卓测试包发布网站http://fir.im的注册与常用功能
807 0
ios和安卓测试包发布网站http://fir.im的注册与常用功能
|
SQL 缓存 Java
Data Access 之 MyBatis Plus(四)- MyBatis Plus Plugin
Data Access 之 MyBatis Plus(四)- MyBatis Plus Plugin
Data Access 之 MyBatis Plus(四)- MyBatis Plus Plugin
|
12月前
|
设计模式 前端开发 Java
|
Java API 容器
Java 8 的流库:Filter、Map、FlatMap 及 Optional 的概念与用法
【6月更文挑战第9天】Java 8 引入了许多强大的新特性,其中流库(Stream API)和 Optional 类极大地简化了集合操作和空值处理。本文将深入探讨 filter、map、flatMap 以及 Optional 的概念和用法,并提供示例代码来展示其实际应用。
455 4
|
Java 开发者 Spring
CompletableFuture 使用总结
CompletableFuture 使用总结
350 1