1 package test;
 2
 3 import java.util.Optional;
 4
 5 import org.junit.Test;
 6 /**
 7  * Optional 类是一个可以为null的容器对象。
 8  * 如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。
 9  * 用于解决空指针异常
10  * @author xiaou
11  *
12  */
13 public class TestA {
14     public static void main(String[] args) {
15         String name = null;
16         String tip ="对象为null";
17
18         /*
19          *  判断对象是否未空,如果为空则返回tip值
20          *  orElse 和 orElseGet 区别
21          *  orElse 是不管对象是不是null都会创建对象
22          *  orElseGet 如果对象为null时才会创建对象
23          */
24         String opt = Optional.ofNullable(name).orElse(tip);
25         // 参数是一个函数式接口
26         String opt2 = Optional.ofNullable(name).orElseGet(()->tip);
27         System.out.println(opt);
28         System.out.println(opt2);
29     }
30     @Test
31     public void test2test() {
32         String name = null;
33         String tip ="...";
34          Optional<String> nullable = Optional.ofNullable(name);
35          //  如果不写这条语句也有可能会造成空指针异常
36          if(nullable.isPresent()) {
37              System.out.println(nullable.get().length());
38          }
39
40         //String opt = Optional.ofNullable(name).orElse(tip);
41
42     }
43     /**
44      * 返回异常
45      *
46      */
47     @Test(expected = IllegalArgumentException.class)
48     public void test3test()  {
49         String name = null;
50         String tip ="...";
51         String nullable = Optional.ofNullable(name).orElseThrow(()->new IllegalArgumentException());
52         System.out.println(nullable);
53     }
54     /**
55      * 过滤值
56      */
57     @Test
58     public void test4test() {
59         String name = "26303qq.com";
60         Optional<String> opt = Optional.ofNullable(name).filter((u)->u.contains("@"));
61         if (opt.isPresent())
62             System.out.println(opt.get().toString());
63     }
64
65     /**
66      * map
67      */
68     @Test
69     public void test5test() {
70         User user = new User("xiaou", "2@qq.com");
71         Optional<String>email = Optional.ofNullable(user).map(u->u.getEmail());
72         System.out.println(email.get());
73     }
74     /*
75      * flatMap与map(Function)非常类似,区别在于传入方法的lambda表达式的返回类型。
76      * map方法中的lambda表达式返回值可以是任意类型,在map函数返回之前会包装为Optional。
77      * 但flatMap方法中的lambda表达式返回值必须是Optionl实例。
78      */
79     /**
80      * flatmap
81      */
82     @Test
83     public void test6test() {
84         User user = new User("xiaou", "2@qq.com");
85         // 第一种
86         Optional<String>email = Optional.ofNullable(user).flatMap(u->Optional.of(u.getEmail()));
87         // 第二种 在user对象中添加一个方法 返回Option对象
88         Optional<String>email2 = Optional.ofNullable(user).flatMap(User::getOptionalByEmail);
89         System.out.println(email.orElse("ss"));
90         System.out.println(email2.get());
91     }
92
93
94 }

 1 package test;
 2
 3 import java.util.Optional;
 4
 5 public class User {
 6     private String name;
 7     private String email;
 8
 9     public User() {
10         super();
11     }
12     public User(String name, String email) {
13         super();
14         this.name = name;
15         this.email = email;
16     }
17     public String getName() {
18         return name;
19     }
20     public void setName(String name) {
21         this.name = name;
22     }
23     public String getEmail() {
24         return email;
25     }
26     public void setEmail(String email) {
27         this.email = email;
28     }
29
30     public Optional<String> getOptionalByEmail(){
31         return Optional.ofNullable(email);
32     }
33 }

View Code

转载于:https://www.cnblogs.com/FlyBlueSky/p/9704140.html

Java8 新特性 Optional相关推荐

  1. Java8新特性 Optional类

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

  2. Java8新特性——Optional 类

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

  3. Java8新特性-Optional

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

  4. Java8新特性Optional类

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

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

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

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

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

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

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

  8. Java8新特性——Optional容器类的简单应用

    1.Optional容器类 Optional<T> 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在 Option ...

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

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

最新文章

  1. ubuntu 虚拟机更改/修改root密码(很简单,在终端使用命令sudo passwd即可)
  2. cocos2d-x 关于tilemap滚动时黑线闪动的问题
  3. 【NLP】5 分钟理解百度 ERNIE 核心思想
  4. pmp每日三题(2022年3月10日)
  5. Easy Tech:什么是I帧、P帧和B帧?
  6. flink从0到第一个应用成功运行遇到的所有问题和解决方法
  7. SpringSecurity实现拦截未登录页面
  8. 2012-11-25学习笔记
  9. 【Qt开发】Qt让线程休息一段时间
  10. mysql存储java对象_Mysql存储java对象 | 学步园
  11. android 加载json停顿,java – 在Android上解析~1 MB JSON非常慢
  12. linux c 端口复用,Linux C++ 网络编程学习系列(1)——端口复用实现
  13. Auto property synthesis will not synthesizeproterty;it will be implemented by its superclass, use@dy
  14. 统计软件是其他计算机软件吗,电脑统计软件,statistical computing software,音标,读音,翻译,英文例句,英语词典...
  15. mdk5(keil 5) 中间库emwin 图形库移植
  16. Linux修改网络支持巨型帧,RAC私网使用巨型帧 Solaris虚拟化环境修改MTU
  17. 嵌入式项目实战——基于QT的视频监控系统设计(二)
  18. PS 父图层与子图层
  19. 2.4:使用交换机构建简单局域网——交换机的高级管理
  20. 使用达思SQL数据库修复软件导出数据库时的接收数据的数据库如何清空表数据?...

热门文章

  1. 25. 合并两个排序的链表
  2. Python爬虫中文乱码问题(爬虫乱码)
  3. 18.IDA-创建自己的sig(创建自己的标签)
  4. Python的基础--对象 转
  5. 如何平衡存储系统的一致性和可用性?
  6. 盘点云计算领域不可不读的9本书
  7. 为什么Flink会成为下一代大数据处理框架的标准?
  8. CANOpen同步报文
  9. 嵌入式linux移植ssh,将SSH移植到arm soc上
  10. 对数组下面的数组截取_numpy数组不同索引方式的区别