java.util.Optional
- public class OptionalDemo {
- public static void main(String[] args) {
- //创建Optional实例,也可以通过方法返回值得到。
- Optional<String> name = Optional.of("Sanaulla");
- //创建没有值的Optional实例,例如值为'null'
- Optional empty = Optional.ofNullable(null);
- //isPresent方法用来检查Optional实例是否有值。
- if (name.isPresent()) {
- //调用get()返回Optional值。
- System.out.println(name.get());
- }
- try {
- //在Optional实例上调用get()抛出NoSuchElementException。
- System.out.println(empty.get());
- } catch (NoSuchElementException ex) {
- System.out.println(ex.getMessage());
- }
- //ifPresent方法接受lambda表达式参数。
- //如果Optional值不为空,lambda表达式会处理并在其上执行操作。
- name.ifPresent((value) -> {
- System.out.println("The length of the value is: " + value.length());
- });
- //如果有值orElse方法会返回Optional实例,否则返回传入的错误信息。
- System.out.println(empty.orElse("There is no value present!"));
- System.out.println(name.orElse("There is some value!"));
- //orElseGet与orElse类似,区别在于传入的默认值。
- //orElseGet接受lambda表达式生成默认值。
- System.out.println(empty.orElseGet(() -> "Default Value"));
- System.out.println(name.orElseGet(() -> "Default Value"));
- try {
- //orElseThrow与orElse方法类似,区别在于返回值。
- //orElseThrow抛出由传入的lambda表达式/方法生成异常。
- empty.orElseThrow(ValueAbsentException::new);
- } catch (Throwable ex) {
- System.out.println(ex.getMessage());
- }
- //map方法通过传入的lambda表达式修改Optonal实例默认值。
- //lambda表达式返回值会包装为Optional实例。
- Optional<String> upperName = name.map((value) -> value.toUpperCase());
- System.out.println(upperName.orElse("No value found"));
- //flatMap与map(Funtion)非常相似,区别在于lambda表达式的返回值。
- //map方法的lambda表达式返回值可以是任何类型,但是返回值会包装成Optional实例。
- //但是flatMap方法的lambda返回值总是Optional类型。
- upperName = name.flatMap((value) -> Optional.of(value.toUpperCase()));
- System.out.println(upperName.orElse("No value found"));
- //filter方法检查Optiona值是否满足给定条件。
- //如果满足返回Optional实例值,否则返回空Optional。
- Optional<String> longName = name.filter((value) -> value.length() > 6);
- System.out.println(longName.orElse("The name is less than 6 characters"));
- //另一个示例,Optional值不满足给定条件。
- Optional<String> anotherName = Optional.of("Sana");
- Optional<String> shortName = anotherName.filter((value) -> value.length() > 6);
- System.out.println(shortName.orElse("The name is less than 6 characters"));
- }
- }
- Sanaulla
- No value present
- The length of the value is: 8
- There is no value present!
- Sanaulla
- Default Value
- Sanaulla
- No value present in the Optional instance
- SANAULLA
- SANAULLA
- Sanaulla
- The name is less than 6 characters
- 原文链接: javacodegeeks 翻译: ImportNew.com - 高俊阳
- 译文链接: http://www.importnew.com/6675.html
java.util.Optional的更多相关文章
- 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 ...
- Java 8 中的 java.util.Optional
Java 8 中的 java.util.Optional 学习了:https://blog.csdn.net/sun_promise/article/details/51362838 package ...
- java.util.Optional学习笔记
java.util.Optional是Java 8新增的类,作为一个持有实例的容器类,可以帮我们把判空的代码写得更优雅,并且该类还提供了一些实用的api,官方文档在这里,接下来我们通过实战来学习吧: ...
- 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 ...
- Java9系列第7篇:Java.util.Optional优化与增强
我计划在后续的一段时间内,写一系列关于java 9的文章,虽然java 9 不像Java 8或者Java 11那样的核心java版本,但是还是有很多的特性值得关注.期待您能关注我,我将把java 9 ...
- JAVA 8 Optional类介绍及其源码
什么是Optional对象 Java 8中所谓的Optional对象,即一个容器对象,该对象可以包含一个null或非null值.如果该值不为null,则调用isPresent()方法将返回true,且 ...
- Java 8 Optional 类
转自:https://www.runoob.com/java/java8-optional-class.html Optional 类是一个可以为null的容器对象.如果值存在则isPresent() ...
- Java 8 新特性-菜鸟教程 (6) -Java 8 Optional 类
Java 8 Optional 类 Optional 类是一个可以为null的容器对象.如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象. Optional 是个容 ...
- java中Optional和Stream流的部分操作
package test9; import java.util.DoubleSummaryStatistics; import java.util.Optional; import java.util ...
随机推荐
- HTML介绍&常用的标签
HTML介绍 1. web服务器本质 import socket s = socket.socket() s.bind(('127.0.0.1', 8080)) s.listen(5) while T ...
- ACM-ICPC 2018 南京赛区网络预赛 L && BZOJ 2763 分层最短路
https://nanti.jisuanke.com/t/31001 题意 可以把k条边的权值变为0,求s到t的最短路 解析 分层最短路 我们建立k+1层图 层与层之间边权为0,i 向 i+1层转 ...
- 【搜索引擎】Solr最新安装以及通过关系型数据库(MySQL,Oracle,PostgreSQL)导入数据
版本号 最新的solr版本 : Solr 8.1.1下载地址:https://lucene.apache.org/solr/downloads.html solr-8.1.0.tgz for Linu ...
- 提示:“请检查浏览器代理设置”/xx-net
1.删除已导入的证书文件(运行certmgr.msc和certlm.msc,然后自己找到xxnet删),2.更新3.3.1(或是自己找到那行代码取消注释,楼下有人提及)3.删除data文件夹(下的ce ...
- redux-thunk
1.thunk function createThunkMiddleware(extraArgument) { return ({ dispatch, getState }) => next = ...
- 基于Spring-SpringMVC-Mybatis的简单样例
复习下 好久没搞过撸过代码了! 这个样例包括一个完整的增删改查! 源代码地址http://download.csdn.net/detail/wangdianyong/8909903
- Linux—read
read:将信息读入一个或多个Shell变量 语法格式:read [-r] 变量名 选项: -r:原始读入,不做任何处理,不将结尾结尾处的反斜杠解释为续行字符 行为模式 ...
- 暴力破解zip文件
#coding=utf-8 """ 用户输入-z参数指定要破解的zip文件,输入-d参数输入字典文件,即可暴力破解加密的zip文件 """ ...
- linux 【目录】
[第一篇]linux[目录] [第五篇]特殊权限及定时任务 [第六篇]用户和用户管理及定时任务复习
- OpenGL在MFC中的使用总结(一)——基本框架
项目中要画3D显示的模型,于是要用到OpenGL,加上是在MFC中,并且是在MFC中的ActiveX中使用.再并且鉴于他们程序主框架的设定.常规的方法还不一定能实现.所以还是查过不少资料,在此一一总结 ...