public class OptionalDemo1 {/*** 测试Optional  -> of*/@Testpublic void testOf() {// 创建一个值huqi的Optional对象Optional<String> ofOptional = Optional.of("huqi");System.out.println(ofOptional); // Optional[huqi]System.out.println(ofOptional.get()); // huqi// 如果使用of创建对象的时候,传了一个null,会抛空指针Optional<String> optionalNull = Optional.of(null); // NullPointerException}/*** 测试 ofNullable*/@Testpublic void testOfNullable() {// 为指定的值创建Optional对象.不校验值是否为空Optional<String> stringOptional = Optional.ofNullable("huqi");System.out.println(stringOptional); // Optional[huqi]System.out.println(stringOptional.get()); // huqiOptional<String> stringOptional1 = Optional.ofNullable(null);System.out.println(stringOptional1); // Optional.emptySystem.out.println(stringOptional1.get()); // java.util.NoSuchElementException: No value present}/*** 创建一个empty对象*/@Testpublic void testEmpty() {// 创建一个空的String类型的Optional对象Optional<String> stringOptional = Optional.empty();System.out.println(stringOptional); // Optional.emptySystem.out.println(stringOptional.get()); // java.util.NoSuchElementException: No value present}/*** 测试get方法,如果是空的对象会报错* */@Testpublic void testGet() {Optional<String> optionalS = Optional.of("huqi");System.out.println(optionalS.get()); // huqiOptional<String> optionalS1 = Optional.empty();System.out.println(optionalS1.get()); // java.util.NoSuchElementException: No value present}/*** 测试orElseGet* 如果调用者的值不为空则输出调用者的值.否则输出or里面的值*/@Testpublic void testOrElse() {Optional<String> optionalS = Optional.of("huqi");System.out.println(optionalS.orElse("胡琦"));  // huqiOptional<String> stringOptional = Optional.empty();System.out.println(stringOptional.orElse("胡琦")); // 胡琦}/*** 测试  orElseThrow*  如果调用者有值,则返回来该值,如果没有值,则抛出一个指定Supplier接口生成的异常*/@Testpublic void testOrElseThrow() {Optional<String> optionalS = Optional.of("胡琦");System.out.println(optionalS.orElseThrow(CustomException::new)); // 胡琦Optional<String> optionalS1 = Optional.empty();System.out.println(optionalS1.orElseThrow(CustomException::new)); // com.huqi.test.demo1.OptionalDemo1$CustomException: 自定义异常,,,}private class CustomException extends RuntimeException {private static final long serialVersionUID = -1999949999999828828L;public CustomException() {super("自定义异常,,,");}public CustomException(String message) {super(message);}}/*** 对调用者进行一次过滤* 和Stream的区别是Stream是对一堆元素进行过滤,而Optional只对一个元素进行过滤*/@Testpublic void testFilter() {Optional<String> optionalS = Optional.of("huqi");System.out.println(optionalS.filter(e -> e.length() > 2).orElse("胡琦")); // huqiOptional<String> optionalS1 = Optional.empty();System.out.println(optionalS1.filter(e -> e.length() > 2).orElse("胡琦")); // 胡琦}/*** 对调用者进行处理,返回处理之后的数据*/@Testpublic void testMap() {Optional<String> optionalS = Optional.of("huqi");// 会将返回值进行包装成Optional类Optional<String> optionalS2 = optionalS.map(e -> e.toUpperCase());System.out.println(optionalS.map(e -> e.toUpperCase()).orElse("胡琦")); // HUQIOptional<String> optionalS1 = Optional.empty();System.out.println(optionalS1.map(e -> e.toUpperCase()).orElse("胡琦"));// 胡琦}/*** 如果调用者存在,就进行function值调用,返回一个Optional类型的值* 否咋返回一个空的Optional对象* flatMap和map的区别是  map回对结果进行封装成OPtional类型*                      flatMap要求返回的必须是Optional类型的,不会对结果进行处理*/@Testpublic void testFlagMap() {Optional<String> optionalS = Optional.of("huqi");// 不会对返回值进行包装,要求返回的值必须是Optional类型的值Optional<String> optionalS3 = optionalS.flatMap(e -> Optional.of("list"));System.out.println(optionalS.flatMap(e -> Optional.of("list")).orElse("胡琦")); // listOptional<String> optionalS1 = Optional.empty();System.out.println(optionalS1.flatMap(e -> Optional.empty()).orElse("胡琦")); // 胡琦Optional<String> optionalS2 = Optional.empty();System.out.println(optionalS2.flatMap(e -> Optional.of("list")).orElse("胡琦")); // 胡琦}/*** 如果调用者有值,就对值进行处理.否则啥都不干*/@Testpublic void testIfPresent() {Optional<String> optionalS = Optional.of("huqi");optionalS.ifPresent(e -> System.out.println("处理了-> " + e)); // 处理了-> huqiOptional<String> optionalS1 = Optional.empty();optionalS1.ifPresent(e -> System.out.println("处理了-> " + e)); // 啥都没有输出}}

Optional使用示例相关推荐

  1. java empty_Java Optional empty()用法及代码示例

    Java中的java.util.Optional类的empty()方法用于获取此Optional类的空实例.该实例不包含任何值. 用法: public static Optional empty() ...

  2. 【超全指南】Java 8 中使用 Optional 处理 null 对象

    作者:超级小豆丁 http://www.mydlq.club/article/88/ 系统环境: Java JDK 版本:1.8 参考地址: Oracle JDK API 参考文档 https://d ...

  3. optional说明

    1.说明 public final class Optional<T> extends Object 可能包含或不包含非空值的容器对象. 如果一个值存在, isPresent()将返回tr ...

  4. pull 仓库 设置docker_Java8之熟透Optional

    摘自:https://www.cnblogs.com/zhangyinhua/p/11551392.html 一.使用Optional引言 1.1.代码问题引出 在写程序的时候一般都遇到过 NullP ...

  5. 手把手教你学Dapr - 6. 发布订阅

    介绍 发布/订阅模式允许微服务使用消息相互通信.生产者或发布者在不知道哪个应用程序将接收它们的情况下向主题发送消息.这涉及将它们写入输入通道.同样,消费者或订阅者订阅该主题并接收其消息,而不知道是什么 ...

  6. Java Semaphore实现高并发场景下的流量控制(附源码) | 实用代码架构

    目录 前言 Semaphore介绍 代码演示 总结 前言 在java开发的工作中是否会出现这样的场景,你需要实现一些异步运行的任务,该任务可能存在消耗大量内存的情况,所以需要对任务进行并发控制.如何优 ...

  7. 放大招了,肝了一篇8万字的Java8新特性总结,赶快收藏

    大家好,我是冰河~~ 说实话,肝这篇文章花了我一个月的时间,关于Java8的新特性全在这儿了,建议先收藏后阅读. Java8有哪些新特性? 简单来说,Java8新特性如下所示: Lambda表达式 函 ...

  8. version 8 新特性整理

    1 Lambda 表达式 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值. 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号. 可选的大括号:如果主体包含了一个语句,就不 ...

  9. INFO:Windows Rundll 和 Rundll32 接口

    本文来自MSDN,原文地址:http://support.microsoft.com/kb/164787/zh-cn Microsoft Windows 95.Windows 98 和 Windows ...

  10. JAVA8之collect总结

    一,collect是一个终端操作,它接收的参数是将流中的元素累积到汇总结果的各种方式(称为收集器) 二,预定义收集器包括将流元素归约和汇总到一个值.如下 工厂方法 返回类型 用于 toList Lis ...

最新文章

  1. VsCode允许JSON文件注释
  2. NSOperationQueue
  3. Android Java使用JavaMail API发送和接收邮件的代码示例
  4. 手把手带你剖析 Springboot 启动原理!
  5. 在 Keil uVision4 MDK下配置开发STM32F103Z完整教程
  6. python3菜鸟教程-总算理解python3中文入门教程
  7. linux虚拟机网卡启动失败问题处理
  8. Android Studio开发基础之自定义View组件
  9. 如何打造一款极速数据湖分析引擎
  10. MySQL备份和还原数据库及慢查询日志使用
  11. 怎样在hdfs上创建多级目录文件夹_【HDFS API编程】第一个应用程序的开发-创建文件夹...
  12. mysql innobackupex 备份及恢复
  13. 实验前准备:CPU学习实验的头文件.vh
  14. Vue 事件修饰符(stop、prevent、self、capture、once、passive)
  15. 合宙Air105 + GC032A摄像头驱动显示教程说明
  16. 绑架、做空、造假…是谁搞垮了曾经的“网红公司”网秦?
  17. Zabbix6.2这些新特性太棒了,手把书教你在Linux部署Zabbix6.2,速度收藏!
  18. Spark RDD编程模型及算子介绍(二)
  19. CAD二次开发 根据多段线Polyline产生的线段Line需要做进一步处理才可以使用
  20. RHEL 7 常用命令

热门文章

  1. Codeforces1389 E. Calendar Ambiguity(数论)
  2. HDU - 5956 The Elder——斜率优化dp
  3. Android根build.gradle中buildscript和allprojects的作用和区别是什么
  4. Vue学习----第三天_webpack(学习webpack看这一篇就够了1.8w字)【6.7】
  5. Photoshop —— 白色(或任意颜色)或黑色物体修改成任意色彩
  6. CRT连接虚拟机乱码解决方法
  7. python温度转换程序改写代码举一反三_006 实例1-温度转换
  8. 错误:PriviledgedActionException as:LCH (auth:SIMPLE) cause:0: No such file or directory
  9. typora里面如何快捷改变字体颜色?
  10. 安卓一键清理内存_雨点清理app下载-雨点清理官方版下载v1.0