java 8 optional 类,Java8新特性-Optional类

Optional 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念。并且可以避免空指针异常。

常用方法:

Optional.of(T t) : 创建一个 Optional 实例Optional.empty() : 创建一个空的 Optional 实例Optional.ofNullable(T t):若 t 不为 null,创建 Optional 实例,否则创建空实例isPresent() : 判断是否包含值orElse(T t) : 如果调用对象包含值,返回该值,否则返回torElseGet(Supplier s) :如果调用对象包含值,返回该值,否则返回 s 获取的值map(Function f): 如果有值对其处理,并返回处理后的Optional,否则返回 Optional.empty()flatMap(Function mapper):与 map 类似,要求返回值必须是Optional

1.of方法

创建一个 Optional 实例

@Test

public void test1(){

Optional op = Optional.of(new Employee());

Employee emp = op.get();

System.out.println(emp);

}

2.ofNullable & empty

若 t 不为 null,创建 Optional 实例,否则创建空实例

@Test

public void test2(){

Optional op = Optional.ofNullable(null);

if(op.isPresent()){

System.out.println(op.get());

}

System.out.println(op.get());

Optional op = Optional.empty();

System.out.println(op.get());

}

3.orElse & orElseGet

orElse(T t) : 如果调用对象包含值,返回该值,否则返回torElseGet(Supplier s) :如果调用对象包含值,返回该值,否则返回 s 获取的值

@Test

public void test3(){

Optional op = Optional.ofNullable(new Employee());

if(op.isPresent()){

System.out.println(op.get());

}

Employee emp = op.orElse(new Employee("张三"));

System.out.println(emp);

Employee emp2 = op.orElseGet(() -> new Employee());

System.out.println(emp2);

}

4.map & flatMap

map(Function f): 如果有值对其处理,并返回处理后的Optional,否则返回 Optional.empty()flatMap(Function mapper):与 map 类似,要求返回值必须是Optional

@Test

public void test4(){

Optional op = Optional.of(new Employee(101, "张三", 18, 9999.99));

Optional op2 = op.map(Employee::getName);

System.out.println(op2.get());

Optional op3 = op.flatMap((e) -> Optional.of(e.getName()));

System.out.println(op3.get());

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/528043.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 进度条jsp,jsp进度条_jsp技巧

开始页面:start.jsp状态页面:status.jspJSP进度条setTimeout(“locationstatus.jsp”, 1000);JSP进度条结果: %CELLPADDING0 CELLSPACING2> percent; i - 10) { %> 正在执行完成尚未开始已停止停止页面:stop.jsp业务逻辑bean:TaskBean.javapackage progress;import java.…

覆盖php配置文件,配置 – 用另一个文件覆盖php-fpm池配置值

必须自定义新服务器的php-fpm池配置,我想知道是否有可能/允许/建议有一个新的池文件,该名称在原始文件之后按字母顺序排列,其中只有值覆盖初始配置.原始配置位于/etc/php/7.0/fpm/pool.d,名为www.conf.看来,根据与安装相关的页面,工程师直接修改原件(保存初始值的副本).例如.[w…

子主题function php,php – 带有依赖项的子主题

我正在尝试创建一个儿童主题.父主题有一个style.css和all,我正在查看wp_enqueue_style()函数,它说你可以包含依赖项.这意味着主题自己的style.css可以是活动的,而在我的子主题中,如果我在style.css中指定相同的规则,它应该覆盖它.但依赖是一个句柄数组.我如何找到这些手柄&…

matlab节点导纳阵求逆,关于利用矩阵稀疏技术求解节点导纳矩阵的MATLAB编程

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼求大神帮忙看看这个程序,解释一下!%形成节点导纳矩阵%考虑参考节点%考虑互感支路function [d_g,d_b,u_g,u_b]calyy(itoi,noels_hgln,noelsnum_hgln,bs_noels,bs_cp,gb_hgln,gb_noels,gb_cp,lv_bs,lv_hgln,lv…

mysql还原txt表的字段结构,mysql 修改表结构(转)

1.增加一个字段(一列)alter table table_name add column column_name type default value; type指该字段的类型,value指该字段的默认值例如:alter table mybook add column publish_house varchar(10) default ;2.更改一个字段名字(也可以改变类型和默认值)alter table tabl…

python操作json字符串,超详细的Python文件操作知识

来自:CSDN,作者:南枝向暖北枝寒MA链接:https://blog.csdn.net/mall_lucy/article/details/104547365【导语】:python进行文件操作,在日常编程中是很常用的。为了方便大家,这里对各种文件操作的知…

php头尾分离,laravel怎么做模板的头尾分离

关注博主,每天分享项目实战经验1.首先找到页面的公共部分,放在layouts这个目录下的home.blade.php2.设置内容区域yield(content)3.在其他页面使用模板引擎,先继承,然后在使用section即可extends(layouts.home)section(content)I a…

oracle11g备份出错,Oracle 11g备份导入12c错误

Oracle 11g备份导入12c错误Oracle11g:用户名:FJCPP 表空间:FYSOFT_DATA01 临时表空间:FYSOFT_DATA01导入:expdp FJCPP/FJCPP DIRECTORYdump_dir DUMPFILEFJCPP_20190717_1517_137.dmp logfileFJCPP_20190717_1517_137.…

matlab数字图像处理课程设计报告,数字图像处理课程设计实验报告.doc

数字图像处理课程设计实验报告数字图像处理课程设计题 目:数字图像处理及Huufman(或小波变换)编码仿真实现学生姓名:学 院:信息工程学院系 别:电子信息工程系专 业:电子信息工程班 级:电子指导教师&#xf…

oracle大于条件,oracle中sql语句中的in的条件数量大于1000有问题

oracle中sql语句中的in的条件数量大于1000有问题oracle中sql语句中select * from t_Test t where t.Id in(1,2,3......)/*数量不能大于1000个*/解决方法 分割成多次in 然后再或上 如 select * from t_Test t where t.Id in(1,2,3......800) or t.Id in(801,802,803......13…

oracle ora-16003,ORA-31600错误分析

作者:guoge[more]今天在对9i数据库做export时,出现如下错误:E:>exp system/manager filebackbill.dmp ownerbackbillExport: Release 9.2.0.4.0 - Production on Thu Nov 18 14:42:11 2004Copyright (c) 1982, 2002, Oracle Corporation. All rights…

探寻FPGA技术的广泛应用与未来前景

目录 1. FPGA的基础 2. FPGA的工作原理 3. FPGA的优势 3.1 灵活性 3.2 快速开发周期 3.3 高性能 4. FPGA的应用领域 4.1 通信系统 4.2 图像处理 4.3 嵌入式系统 4.4 科学研究 5. FPGA的未来展望 1. FPGA的基础 FPGA,即现场可编程门阵列(Fiel…

oracle元数据到ods,将元数据存储到Jackrabbit存储库中

小编典典对于JCR 2.0,上传文件基本上与对于JCR 1.0而言是相同的。但是,JCR 2.0添加了一些有用的附加内置属性定义。“ nt:file”节点类型旨在表示文件,并且在JCR 2.0中具有两个内置属性定义(这两个属性定义都是在创建节点时由存储…

linux 负载命令,通过Linux命令查看系统平均负载的方法

1、Linux系统的平均负载的概念有时候我们会觉得系统响应很慢,但是又找不到原因,这时就要查看平均负载了,看它是否有大量的进程在排队等待。特定时间间隔内运行队列中的平均进程数可以反映系统的繁忙程度,所以我们通常会在自己的网…

linux 进程调度源码分析,Linux调度器源码分析

代码分析根据3.10版本通过对前面的学习我们知道Linux的调度分为两种周期调度 完成周期性算法参数的更新和系统其它实际的检查主调的 真正的调度过程我们现在来看下主调的的代码框架。入口根《调度发生的情况》的学习,我们知道所有的调度最后都会到 schedule 函数中。…

linux修改端口cost值,Linux下通过修改网卡驱动的参数调整Intel网卡的性能

下面列出paramerter中和性能相关的几个以及他们的取值范围和默认值。InterruptThrottleRate范围:100-100000 (0off, 1dynamic)默认:0注:不支持82542, 82543, 82545, 82544芯片RxDescriptors范围:80-256 for 82542 and 82543-based…

Linux跑齿轮命令,【转】glxgears命令

glxgears是一个测试你的Linux是否可以顺利运行2D、3D的测试软件。这个程序弹出一个窗口,里面有三个转动的齿轮,屏幕将显示出每五秒钟转动多少栅,所以这是一个合理的性能测试。窗户是可以缩放的,栅数多少极大程度上依赖于窗口的大小…

log4j日志 linux配置,Log4j 日志详细用法

简单的说log4j就是帮助开发人员进行日志输出管理的API类库。它最重要的特点就可以配置文件灵活的设置日志信息的优先级、日志信息的输出目的地、日志信息的输出格式Log4j 除了可以记录程序运行日志信息外还有一重要的功能就是用来显示调试信息。程序员经常会遇到脱离Java ide环…

linux 改目录前缀,Linux修改终端显示前缀及环境变量

Linux终端前面默认显示一长串,如:这是由PS1环境变量决定的:[[email protected] dir]$ echo $PS1[\u\H \W]\$其中\u代表用户,\H代表主机,\W代表目录可以修改环境变量,有三种方法:1. 直接修改&…