1.Optional容器类

Optional<T> 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念。并且可以避免空指针异常。

常用方法 :

  • Optional.of(T t) : 创建一个 Optional 实例
  • Optional.empty() : 创建一个空的 Optional 实例
  • Optional.ofNullable(T t) : 若 t 不为 null,创建 Optional 实例;否则创建空实例
  • isPresent() : 判断是否包含值
  • orElse(T t) : 如果调用对象包含值,返回该值,否则返回t
  • orElseGet(Supplier s) : 如果调用对象包含值,返回该值,否则返回 s 获取的值
  • map(Function f) : 如果有值对其处理,并返回处理后的Optional,否则返回 Optional.empty()
  • flatMap(Function mapper) : 与 map 类似,要求返回值必须是Optional

2.应用举例

下面的代码案例按照上面所列方法顺序给出。首先需要一个Employee类用作测试。

package com.szh.java8;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;/****/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Employee {private Integer id;private String name;private Integer age;private Double salary;}
    @Testpublic void test1() {Optional<Employee> op = Optional.of(new Employee());Employee employee = op.get();System.out.println(employee);}

    @Testpublic void test2() {Optional<Employee> op = Optional.empty();System.out.println(op.get());}

    @Testpublic void test3() {Optional<Employee> op = Optional.ofNullable(new Employee(1001,"张起灵",18,6666.66));System.out.println(op.get());}

    @Testpublic void test4() {Optional<Employee> op = Optional.of(new Employee());if (op.isPresent()) {System.out.println(op.get());}}

    @Testpublic void test5() {Optional<Employee> op1 = Optional.ofNullable(null);Employee employee1 = op1.orElse(new Employee(1001,"张起灵",18,6666.66));System.out.println(employee1);Optional<Employee> op2 = Optional.ofNullable(new Employee());Employee employee2 = op2.orElse(new Employee(1001,"张起灵",18,6666.66));System.out.println(employee2);}

    @Testpublic void test6() {Optional<Employee> op1 = Optional.ofNullable(null);Employee employee1 = op1.orElseGet(() -> new Employee(1001,"张起灵",18,6666.66));System.out.println(employee1);Optional<Employee> op2 = Optional.ofNullable(new Employee());Employee employee2 = op2.orElseGet(() -> new Employee(1001,"张起灵",18,6666.66));System.out.println(employee2);}

    @Testpublic void test7() {Optional<Employee> op1 = Optional.of(new Employee(1001,"张起灵",18,6666.66));Optional<String> op2 = op1.map(Employee::getName);System.out.println(op2.get());Optional<String> op3 = op1.flatMap((e) -> Optional.of(e.getName()));System.out.println(op3.get());}

Java8新特性——Optional容器类的简单应用相关推荐

  1. Java8新特性——Optional 类

    文章目录 前言 Optional 类 1.概述 2.API介绍 of ofNullable empty isPresent get ifPresent orElse orElseGet orElseT ...

  2. Java8新特性-Optional

    文章目录 简介 Optional源码分析和使用场景 属性和构造 常用方法 get()方法 isPresent()方法 ifPresent(Consumer<? super T> consu ...

  3. Java8新特性 Optional类

    作为开发人员每天与NullPointerException斗智斗勇.每接收到参数或调用方法获得值得判断一下是否为null.稍不留意,空指针异常就像幽灵一样出现了.这篇文章我们来学习Java8是如何通过 ...

  4. Java8新特性-Optional,狂神说docker笔记百度云

    // 这个是通用的代表NULL值的Optional实例private static final Optional<?> EMPTY = new Optional<>();// ...

  5. Java8新特性Optional类

    这里写自定义目录标题 Java8 Optional 类 前言 创建 Optional 实例 Optional API常用接口的用法 get()方法 isPresent()方法 isPresent()方 ...

  6. Java8新特性Optional、接口中的默认方法与静态方法

    Optional Optional 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念 ...

  7. Java8新特性——Stream API的简单应用

    1.写在前面 关于Stream API的内容,已经基本上说完了.大家可以参考我的这两篇文章: Stream API的创建方式及中间操作.Stream API的终止操作 那么这篇文章主要就是说一个Str ...

  8. java 8 optional 类,Java8新特性-Optional类

    Optional 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念.并且可以避免空指 ...

  9. JAVA8新特性Optional和Stream和Localdate用法

    1.Optional类是Java8为了解决null值判断问题 2.Stream 是Java SE 8类库中新增的关键抽象,Java 8 引入的的Stream主要用于取代部分Collection的操作, ...

最新文章

  1. Matlab与数据结构 -- 对矩阵的排序
  2. 全球Top5互联网巨头崛起秘诀,真相竟然是?
  3. MySQL 复制 主键冲突
  4. 使用nc检测udp端口是否可以正常通讯
  5. 做「容量预估」可没有true和false
  6. Module的加载实现
  7. java file 堵塞_单元测试最终在Java 6中阻塞
  8. 超全开放 API 免费调用,这款 API 管理工具太香了!
  9. atitit.为什么技术的选择方法java超过.net有前途
  10. 从DB-Engines看传统数据库生存状况
  11. torch中permute()函数用法补充内容(矩阵维度变化详细过程)
  12. pp助手苹果版_苹果一键刷机助手app免费版下载-一键刷机精灵下载手机版
  13. windows 2012安装证书服务器,windows 2012 RADIUS服务器认证问题
  14. [讨论] 1.虚拟设备驱动程序初步
  15. 原生JavaScript使用和jQuery使用
  16. go语言处理html文件,go语言操作文件实例笔记
  17. 移动通信网络规划:机房设计
  18. AI-大型软件研发效能倍增的银弹
  19. 2022-2027年中国微创介入医疗器械市场竞争态势及行业投资前景预测报告
  20. unity animator动画融合时的上下半身速度分离控制

热门文章

  1. hive操作tmp文件查看内容报错
  2. 【Linux kernel/CPU idle】CPU Idle 初探
  3. WANem弱网环境模拟工具的使用探索
  4. mycncart 之网银在线chinapay支付方式
  5. MobaXterm连接服务器并运行服务器中的文件
  6. axios中并发、继发请求的全局loading设置
  7. oracle查询父节点及其下所有子节点
  8. retina屏幕截取验证码
  9. 1、Extjs——ExtJs简介
  10. Python批量下载CHIRPS气象数据并完成解压裁剪等