这是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。

package com.polaris;

import java.util.Arrays;
import java.util.List;
import java.util.Optional; /**
* @author :sixinshuier
* @date :Created in 2020/6/3 14:35
* @description:java 8 optional
* @modified By:
*/
public class TestOptional { public static void main(String[] args) {
//1. of 为非null的值创建一个Optional。of方法通过工厂方法创建Optional类。需要注意的是,创建对象时传入的参数不能为null。如果传入参数为null,则抛出NullPointerException 。
Optional<String> name = Optional.of("polaris"); //2. isPresent() 如果有值,则返回true,否则返回false
if (name.isPresent()) {
System.out.println(name.get());//如果Optional有值则将其返回,否则抛出NoSuchElementException。
} Optional<String> name1 = Optional.of(""); // isPresent() 如果有值,则返回true,否则返回false
if (name1.isPresent()) {
System.out.println(name1.get());//如果Optional有值则将其返回,否则抛出NoSuchElementException。
} // 3. ifPresent 如果Optional实例有值则为其调用consumer,否则不做处理
name.ifPresent((value) -> {
System.out.println("lambda value" + value);
}); // 4. orElse ,orElseGet orElseGet与orElse方法类似,区别在于得到的默认值。orElse方法将传入的字符串作为默认值,orElseGet方法可以接受Supplier接口的实现用来生成默认值
System.out.println(name1.orElse("polaris1"));
System.out.println(name1.orElseGet(() -> "defalue value"));
System.out.println(name1.orElseGet(String::new)); //5. orElseThrow 如果有值则将其返回,否则抛出supplier接口创建的异常
name1.orElseThrow(IllegalArgumentException::new); // 6.map 如果有值,则对其执行调用mapping函数得到返回值。如果返回值不为null,则创建包含mapping返回值的Optional作为map方法返回值,否则返回空Optional。
Optional<String> upperName = name.map((value) -> value.toUpperCase());
System.out.println(upperName.orElse("No value found")); //7. flatMap 如果有值,为其执行mapping函数返回Optional类型返回值,否则返回空Optional。flatMap方法与map方法类似,区别在于mapping函数的返回值不同。map方法的mapping函数返回值可以是任何类型T,而flatMap方法的mapping函数必须是Optional。
upperName = name.flatMap((value) -> Optional.of(value.toUpperCase()));
System.out.println(upperName.get()); //8. filter 如果有值并且满足断言条件返回包含该值的Optional,否则返回空Optional。
List<String> names = Arrays.asList("polaris", "start");
for (String s : names) {
Optional<String> nameLenLessThan7 = Optional.of(s).filter((value) -> value.length() < 7);
System.out.println(nameLenLessThan7.orElse("The name is more than 6 characters"));
}
}
}

最新文章

  1. Node.js之NPM工具使用
  2. MySQL 5.7系列之sys schema(2)
  3. 简单json语句转化为map保存
  4. Java SE Eclipse中引入第三方jar及class
  5. @(报错)could not find the main class, Program will exit(已解决)
  6. ant 配置 和测试 1
  7. Linux 搭建 Nginx+PHP-FPM环境
  8. java 对小数位的处理 BigDecimal DecimalFormat 常用操作 浅解
  9. QEMU KVM Libvirt手册(5) &ndash; snapshots
  10. MySql cmd下的学习笔记 —— 有关常用函数的介绍(数学函数,聚合函数等等)
  11. python3+selenium框架设计01-Page Object
  12. IO流-file
  13. java/javac命令行如何同时引用多个包;错误 TypeError: &#39;JavaPackage&#39; object is not callable 的含义
  14. python基础数据类型考试题
  15. 前端 HTML body标签相关内容 常用标签 表单标签 form
  16. SpringdataJpa的官方API学习
  17. 【集成学习】sklearn中xgboost模块的XGBClassifier函数
  18. Java基础知识你知道多少?
  19. android studio每次启动都要在fetching Android sdk compoment information停好久 怎么解决?
  20. [Spring Boot] Introduce to Mockito

热门文章

  1. scrapy 运行逻辑
  2. javascript 十大经典排序
  3. 都学Python了,C++难道真的用不着了吗?
  4. C++类的静态成员笔记
  5. 不用typsescript也能使用类型增强功能
  6. 阅读源码,HashMap回顾
  7. 在windows上安装MySQL数据库注意点及Navicat Premium 15的破解
  8. Chrome OS超便捷安装指南
  9. C# 应用 - 多线程 1) 多线程的知识图谱
  10. C# 基础 - 日志捕获二使用 log4net