Optional 类(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

示例代码:

public class TestOptional {
public static void main(String[] args) {
// Optional.of(T t):封装一个Optional实例,其中值t不能为null,否则有NullPointException
Optional<Demo> optional1 = Optional.of(new Demo());
System.out.println(optional1.get());
// 运行结果:Demo{name='null', age=null, salary=null, status=null} // Optional.empty():封装一个空的Optional对象(封装null)
Optional<Demo> optional2 = Optional.empty();
System.out.println(optional2.get());
// 运行结果:Exception in thread "main" java.util.NoSuchElementException: No value present
// at java.util.Optional.get(Optional.java:135)
// at TestOptional.main(TestOptional.java:16) // Optional.ofNullable(T t):非null就和of方法一样,null就和empty()一样
Optional<Demo> optional3 = Optional.ofNullable(new Demo());
// isPresent():判断其中是否包含值
if (optional3.isPresent()) {
System.out.println(optional3.get());
}
// 运行结果:Demo{name='null', age=null, salary=null, status=null} // orElse(T t) : 如果包含值,那返回值;否则返回替代值T
Optional<Demo> optional4 = Optional.ofNullable(null);
Demo demo1 = optional4.orElse(new Demo("里斯", 24, 15000.1, Demo.Status.FREE));
System.out.println(demo1);
// 运行结果:Demo{name='里斯', age=24, salary=15000.1, status=FREE} // orElseGet(Supplier s) :如果包含值,那返回值;否则返回s 获取的值
Demo demo2 = optional4.orElseGet(() -> new Demo());
System.out.println(demo2);
// 运行结果:Demo{name='null', age=null, salary=null, status=null} // map(Function f): 如果有值对其处理,并返回处理后的Optional,否则返回Optional.empty()
Optional<Demo> optional5 = Optional.ofNullable(new Demo("里斯", 24, 15000.1, Demo.Status.FREE));
Optional<String> stringOptional1 = optional5.map(x -> x.getName());
System.out.println(stringOptional1.get());
// 运行结果:里斯 // flatMap(Function mapper):与map 类似,要求返回值必须是Optional
Optional<String> stringOptional2 = optional5.flatMap(x -> Optional.of(x.getName()));
System.out.println(stringOptional2.get());
// 运行结果:里斯
}
}

Java8新特性 - Optional容器类的更多相关文章

  1. java8 新特性 Optional容器类

    public class Godness { private String name; public Godness() { } public Godness(String name) { this. ...

  2. Java8 新特性 Optional 类

    Optional 类的简介   Optional类的是来自谷歌Guava的启发,然后就加入到Java8新特性中去了.Optional类主要就是为子决解价值亿万的错误,空指针异常.   Optional ...

  3. JAVA8新特性Optional,非空判断

    Optional java 的 NPE(Null Pointer Exception)所谓的空指针异常搞的头昏脑涨, 有大佬说过 "防止 NPE,是程序员的基本修养." 但是修养归 ...

  4. Java8新特性——Optional

    前言 在开发中,我们常常需要对一个引用进行判空以防止空指针异常的出现.Java8引入了Optional类,为的就是优雅地处理判空等问题.现在也有很多类库在使用Optional封装返回值,比如Sprin ...

  5. Java8新特性--Optional

    Java 8引入了一个新的Optional类.Optional类的Javadoc描述如下: 这是一个可以为null的容器对象.如果值存在则isPresent()方法会返回true,调用get()方法会 ...

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

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

  7. java8 新特性 -Optional的常见用法

    1. Optional 一. 简介 Opitonal是java8引入的一个新类,目的是为了解决空指针异常问题.本质上,这是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为 ...

  8. Java8新特性——Optional类的使用(有效的避免空指针异常)

    OPtional类的使用 概述 到目前为止,臭名昭著的空指针异常是导致Java应用程序失败的最常见原因.以前,为了解决空指针异常,Google公司著名的Guava项目引入了Optional类,Guav ...

  9. 【Java8新特性】- Optional应用

    Java8新特性 - Optional应用 生命不息,写作不止 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! ...

随机推荐

  1. 阿里云yii2 composer update 很慢的解决办法

    先执行如下语句 composer global require "fxp/composer-asset-plugin:dev-master" 再执行 composer update

  2. Java 中如何输入

    import java.util.Scanner; //键盘扫描类public class Test{public static void main(String[] args) {Scanner i ...

  3. Android页面切换

    参考地址: http://www.crifan.com/android_how_to_create_new_ui_and_switch_to_another_new_ui/ 想要实现,在Android ...

  4. android ------ 实现高德定位并获取相应信息 ( 最新版高德SDK 和 Android SDK版本)

    Android开发项目时常常会遇到定位这个功能, 很久以前写过一篇了,官方也更新了一些东西,我也更新下 以前使用的是jar包 导入来实现高德定位 老版本 链接:https://www.cnblogs. ...

  5. Shell中 2>/dev/null

    1.文件描述符 Linux系统预留可三个文件描述符:0.1和2,他们的意义如下所示: 0——标准输入(stdin) 1——标准输出(stdout) 2——标准错误(stderr) 标准输出——stdo ...

  6. 编译Flink 1.9.0

    闲来无事,编个Flink 1.9 玩玩 1.下载flink.flink-shaded 源码.解压 flink flink-shaded 7.0 [venn@venn release]$ ll tota ...

  7. Flink统计当日的UV、PV

    Flink 统计当日的UV.PV 测试环境: flink 1.7.2 1.数据流程 a.模拟数据生成,发送到kafka(json 格式) b.flink 读取数据,count c. 输出数据到kafk ...

  8. layer confirm 三种选择按钮

    layer.confirm('请选择是否通过提现?(tips:同意直接打款,驳回不可恢复)', { btn : ['通过-打款','不通过','通过-已打款'], btn1:function(){ a ...

  9. LODOP设置打印份数及是否逐份输出

    LODOP中通过SET_PRINT_COPIES可以设置打印份数,例如:LODOP.SET_PRINT_COPIES(2);//指定份数为2份 如果一个任务里有多页,打印份数的时候,有两种输出方式,一 ...

  10. Swoole练习 TCP

    TCP <?php $serv = new swoole_server("127.0.0.1", 9501); //监听连接进入事件 $serv->on('connec ...