1. public class OptionalDemo {
  2.  
  3. public static void main(String[] args) {
  4. //创建Optional实例,也可以通过方法返回值得到。
  5. Optional<String> name = Optional.of("Sanaulla");
  6.  
  7. //创建没有值的Optional实例,例如值为'null'
  8. Optional empty = Optional.ofNullable(null);
  9.  
  10. //isPresent方法用来检查Optional实例是否有值。
  11. if (name.isPresent()) {
  12. //调用get()返回Optional值。
  13. System.out.println(name.get());
  14. }
  15.  
  16. try {
  17. //在Optional实例上调用get()抛出NoSuchElementException。
  18. System.out.println(empty.get());
  19. } catch (NoSuchElementException ex) {
  20. System.out.println(ex.getMessage());
  21. }
  22.  
  23. //ifPresent方法接受lambda表达式参数。
  24. //如果Optional值不为空,lambda表达式会处理并在其上执行操作。
  25. name.ifPresent((value) -> {
  26. System.out.println("The length of the value is: " + value.length());
  27. });
  28.  
  29. //如果有值orElse方法会返回Optional实例,否则返回传入的错误信息。
  30. System.out.println(empty.orElse("There is no value present!"));
  31. System.out.println(name.orElse("There is some value!"));
  32.  
  33. //orElseGet与orElse类似,区别在于传入的默认值。
  34. //orElseGet接受lambda表达式生成默认值。
  35. System.out.println(empty.orElseGet(() -> "Default Value"));
  36. System.out.println(name.orElseGet(() -> "Default Value"));
  37.  
  38. try {
  39. //orElseThrow与orElse方法类似,区别在于返回值。
  40. //orElseThrow抛出由传入的lambda表达式/方法生成异常。
  41. empty.orElseThrow(ValueAbsentException::new);
  42. } catch (Throwable ex) {
  43. System.out.println(ex.getMessage());
  44. }
  45.  
  46. //map方法通过传入的lambda表达式修改Optonal实例默认值。
  47. //lambda表达式返回值会包装为Optional实例。
  48. Optional<String> upperName = name.map((value) -> value.toUpperCase());
  49. System.out.println(upperName.orElse("No value found"));
  50.  
  51. //flatMap与map(Funtion)非常相似,区别在于lambda表达式的返回值。
  52. //map方法的lambda表达式返回值可以是任何类型,但是返回值会包装成Optional实例。
  53. //但是flatMap方法的lambda返回值总是Optional类型。
  54. upperName = name.flatMap((value) -> Optional.of(value.toUpperCase()));
  55. System.out.println(upperName.orElse("No value found"));
  56.  
  57. //filter方法检查Optiona值是否满足给定条件。
  58. //如果满足返回Optional实例值,否则返回空Optional。
  59. Optional<String> longName = name.filter((value) -> value.length() > 6);
  60. System.out.println(longName.orElse("The name is less than 6 characters"));
  61.  
  62. //另一个示例,Optional值不满足给定条件。
  63. Optional<String> anotherName = Optional.of("Sana");
  64. Optional<String> shortName = anotherName.filter((value) -> value.length() > 6);
  65. System.out.println(shortName.orElse("The name is less than 6 characters"));
  66.  
  67. }
  68.  
  69. }
  1. Sanaulla
  2. No value present
  3. The length of the value is: 8
  4. There is no value present!
  5. Sanaulla
  6. Default Value
  7. Sanaulla
  8. No value present in the Optional instance
  9. SANAULLA
  10. SANAULLA
  11. Sanaulla
  12. The name is less than 6 characters
  1. 原文链接: javacodegeeks 翻译: ImportNew.com - 高俊阳
  2. 译文链接: http://www.importnew.com/6675.html

java.util.Optional的更多相关文章

  1. jdk8新特性:在用Repository实体查询是总是提示要java.util.Optional, 原 Inferred type 'S' for type parameter 'S' is not within its bound;

    jdk8新特性:在用Repository实体查询是总是提示要java.util.Optional 在使用springboot 方法报错: Inferred type 'S' for type para ...

  2. Java 8 中的 java.util.Optional

    Java 8 中的 java.util.Optional 学习了:https://blog.csdn.net/sun_promise/article/details/51362838 package ...

  3. java.util.Optional学习笔记

    java.util.Optional是Java 8新增的类,作为一个持有实例的容器类,可以帮我们把判空的代码写得更优雅,并且该类还提供了一些实用的api,官方文档在这里,接下来我们通过实战来学习吧: ...

  4. Java-Class-FC:java.util.Optional

    ylbtech-Java-Class-FC:java.util.Optional 1.返回顶部   2.返回顶部 1.1. import java.util.Optional; 1.2.1. @Api ...

  5. Java9系列第7篇:Java.util.Optional优化与增强

    我计划在后续的一段时间内,写一系列关于java 9的文章,虽然java 9 不像Java 8或者Java 11那样的核心java版本,但是还是有很多的特性值得关注.期待您能关注我,我将把java 9 ...

  6. JAVA 8 Optional类介绍及其源码

    什么是Optional对象 Java 8中所谓的Optional对象,即一个容器对象,该对象可以包含一个null或非null值.如果该值不为null,则调用isPresent()方法将返回true,且 ...

  7. Java 8 Optional 类

    转自:https://www.runoob.com/java/java8-optional-class.html Optional 类是一个可以为null的容器对象.如果值存在则isPresent() ...

  8. Java 8 新特性-菜鸟教程 (6) -Java 8 Optional 类

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

  9. java中Optional和Stream流的部分操作

    package test9; import java.util.DoubleSummaryStatistics; import java.util.Optional; import java.util ...

随机推荐

  1. HTML介绍&常用的标签

    HTML介绍 1. web服务器本质 import socket s = socket.socket() s.bind(('127.0.0.1', 8080)) s.listen(5) while T ...

  2. ACM-ICPC 2018 南京赛区网络预赛 L && BZOJ 2763 分层最短路

    https://nanti.jisuanke.com/t/31001 题意 可以把k条边的权值变为0,求s到t的最短路 解析  分层最短路  我们建立k+1层图 层与层之间边权为0,i 向 i+1层转 ...

  3. 【搜索引擎】Solr最新安装以及通过关系型数据库(MySQL,Oracle,PostgreSQL)导入数据

    版本号 最新的solr版本 : Solr 8.1.1下载地址:https://lucene.apache.org/solr/downloads.html solr-8.1.0.tgz for Linu ...

  4. 提示:“请检查浏览器代理设置”/xx-net

    1.删除已导入的证书文件(运行certmgr.msc和certlm.msc,然后自己找到xxnet删),2.更新3.3.1(或是自己找到那行代码取消注释,楼下有人提及)3.删除data文件夹(下的ce ...

  5. redux-thunk

    1.thunk function createThunkMiddleware(extraArgument) { return ({ dispatch, getState }) => next = ...

  6. 基于Spring-SpringMVC-Mybatis的简单样例

    复习下 好久没搞过撸过代码了! 这个样例包括一个完整的增删改查! 源代码地址http://download.csdn.net/detail/wangdianyong/8909903

  7. Linux—read

    read:将信息读入一个或多个Shell变量    语法格式:read [-r] 变量名    选项:        -r:原始读入,不做任何处理,不将结尾结尾处的反斜杠解释为续行字符    行为模式 ...

  8. 暴力破解zip文件

    #coding=utf-8 """ 用户输入-z参数指定要破解的zip文件,输入-d参数输入字典文件,即可暴力破解加密的zip文件 """ ...

  9. linux 【目录】

    [第一篇]linux[目录] [第五篇]特殊权限及定时任务 [第六篇]用户和用户管理及定时任务复习

  10. OpenGL在MFC中的使用总结(一)——基本框架

    项目中要画3D显示的模型,于是要用到OpenGL,加上是在MFC中,并且是在MFC中的ActiveX中使用.再并且鉴于他们程序主框架的设定.常规的方法还不一定能实现.所以还是查过不少资料,在此一一总结 ...