Java8 新特性 Optional
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相关推荐
- Java8新特性 Optional类
作为开发人员每天与NullPointerException斗智斗勇.每接收到参数或调用方法获得值得判断一下是否为null.稍不留意,空指针异常就像幽灵一样出现了.这篇文章我们来学习Java8是如何通过 ...
- Java8新特性——Optional 类
文章目录 前言 Optional 类 1.概述 2.API介绍 of ofNullable empty isPresent get ifPresent orElse orElseGet orElseT ...
- Java8新特性-Optional
文章目录 简介 Optional源码分析和使用场景 属性和构造 常用方法 get()方法 isPresent()方法 ifPresent(Consumer<? super T> consu ...
- Java8新特性Optional类
这里写自定义目录标题 Java8 Optional 类 前言 创建 Optional 实例 Optional API常用接口的用法 get()方法 isPresent()方法 isPresent()方 ...
- Java8新特性-Optional,狂神说docker笔记百度云
// 这个是通用的代表NULL值的Optional实例private static final Optional<?> EMPTY = new Optional<>();// ...
- Java8新特性Optional、接口中的默认方法与静态方法
Optional Optional 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念 ...
- JAVA8新特性Optional和Stream和Localdate用法
1.Optional类是Java8为了解决null值判断问题 2.Stream 是Java SE 8类库中新增的关键抽象,Java 8 引入的的Stream主要用于取代部分Collection的操作, ...
- Java8新特性——Optional容器类的简单应用
1.Optional容器类 Optional<T> 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在 Option ...
- java 8 optional 类,Java8新特性-Optional类
Optional 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念.并且可以避免空指 ...
最新文章
- ubuntu 虚拟机更改/修改root密码(很简单,在终端使用命令sudo passwd即可)
- cocos2d-x 关于tilemap滚动时黑线闪动的问题
- 【NLP】5 分钟理解百度 ERNIE 核心思想
- pmp每日三题(2022年3月10日)
- Easy Tech:什么是I帧、P帧和B帧?
- flink从0到第一个应用成功运行遇到的所有问题和解决方法
- SpringSecurity实现拦截未登录页面
- 2012-11-25学习笔记
- 【Qt开发】Qt让线程休息一段时间
- mysql存储java对象_Mysql存储java对象 | 学步园
- android 加载json停顿,java – 在Android上解析~1 MB JSON非常慢
- linux c 端口复用,Linux C++ 网络编程学习系列(1)——端口复用实现
- Auto property synthesis will not synthesizeproterty;it will be implemented by its superclass, use@dy
- 统计软件是其他计算机软件吗,电脑统计软件,statistical computing software,音标,读音,翻译,英文例句,英语词典...
- mdk5(keil 5) 中间库emwin 图形库移植
- Linux修改网络支持巨型帧,RAC私网使用巨型帧 Solaris虚拟化环境修改MTU
- 嵌入式项目实战——基于QT的视频监控系统设计(二)
- PS 父图层与子图层
- 2.4:使用交换机构建简单局域网——交换机的高级管理
- 使用达思SQL数据库修复软件导出数据库时的接收数据的数据库如何清空表数据?...