java optional 用法_Java8 中的 Optional 相关用法
基本方法:
of() 为非 null 的值创建一个 Optional 实例
isPresent() 如果值存在,返回 true,否则返回 false
get() 返回该对象,有可能返回 null
应用场景:
1> 默认值
传统方式
public static String getName(User u) {
if (u == null)
return "Unknown";
return u.name;
}
杜绝使用这种方式(不简洁)
public static String getName(User u) {
Optional user = Optional.ofNullable(u);
if (!user.isPresent())
return "Unknown";
return user.get().name;
}
正确方式(链式调用):
public static String getName(User u) {
return Optional.ofNullable(u)
.map(user->user.name)
.orElse("Unknown");
//.orElseGet(() -> "john");
}
2>多重非空条件判断
传统方式
public static String getChampionName(Competition comp) throws IllegalArgumentException {
if (comp != null) {
CompResult result = comp.getResult();
if (result != null) {
User champion = result.getChampion();
if (champion != null) {
return champion.getName();
}
}
}
throw new IllegalArgumentException("The value of param comp isn‘t available.");
}
链式调用(map 遍历属性)
public static String getChampionName(Competition comp) throws IllegalArgumentException {
return Optional.ofNullable(comp)
.map(c->c.getResult())
.map(r->r.getChampion())
.map(u->u.getName())
.orElseThrow(()->new IllegalArgumentException("The value of param comp isn‘t available."));
}
3> 不为空才操作(单边判断)
string.ifPresent(System.out::println);
4> 指定条件过滤
public boolean priceIsInRange2(Modem modem2) {
return Optional.ofNullable(modem2)
.map(Modem::getPrice)
.filter(p -> p >= 10)
.isPresent();
}
5. filter 与 findFirst 结合
Optional found = Stream.of(getEmpty(), getHello(), getBye())
.filter(Optional::isPresent)
.map(Optional::get)
.findFirst();
233
原文:https://www.cnblogs.com/lemos/p/10847523.html
java optional 用法_Java8 中的 Optional 相关用法相关推荐
- Java中Date各种相关用法
Java中Date各种相关用法 本文主要介绍Java中Date各种相关用法. AD: Java中Date各种相关用法(一) 1.计算某一月份的最大天数 Java代码 Calendar time=C ...
- java attributes用法_C#中的Attributes的用法
今天研究了一下C#中的Attributes的用法,感觉很有用,现总结以下: 在前台用JS写的脚本方法,除了可以直接用在前台控件的属性中,还可以在后台运用. 即在后台页面加载时,调用JS方法.语法格式有 ...
- oracle中rollback用法,Oracle中SAVEPOINT和ROLLBACK用法
savepoint是事务内部允许部分rollback的标志符.因为事务中对记录做了修改,我们可以在事务中创建savepoint来标识不同的点.如果遇到错误,就可以rollback到不同的点或直接回来事 ...
- python中divmod函数的用法_Python中divmod函数的用法
Python中divmod函数的用法,语言,余数,是一种,面向对象,函数 Python中divmod函数的用法 Python中divmod函数的用法 在Python中divmod函数的作用是把除数和余 ...
- java sendmessage函数_vc中SendMessage自定义消息函数用法实例
本文实例讲述了vc中SendMessage自定义消息函数用法,分享给大家供大家参考.具体如下: SendMessage的基本结构如下: SendMessage( HWND hWnd, //消息传递的 ...
- java 有趣注释_Java8 中有趣酷炫的小技巧
https://mp.weixin.qq.com/s/ZlbcfT-fUoVEctSqBeZWcg Java8 中有趣酷炫的小技巧 执行注释 大多数开发人员认为 注释 永远不会在程序中执行,并用于帮助 ...
- python中int用法,Python中int()函数的用法浅析
int()是Python的一个内部函数 Python系统帮助里面是这么说的 >>> help(int) Help on class int in module __builtin__ ...
- linux中ftp的用法,linux中的ftp命令用法(7页)-原创力文档
第 第 PAGE 1 页 共 NUMPAGES 1 页 linux中的ftp命令用法 Linux系统中的ftp命令功能强大,那么它的具体用法是怎样呢?下面由小编为大家整理了linux中的ftp命令用法 ...
- python的继承用法_python中继承有什么用法?python继承的用法详解
本篇文章给大家带来的内容是关于python中继承有什么用法?python继承的用法详解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 面向对象三大特征 1.封装:根据职责将属性和方法 ...
最新文章
- 我的世界最新版本生存服务器ip,我的世界服务器古风小阁IP|纯净生存(1.15.2)
- LeetCode 468 validate ip address(正则表达式)
- plsql动态的sql
- x_html语言名词解释,第2章++XHTML标记语言(97页)-原创力文档
- DevC++最新汉化版(支持C++11)
- android 学习链接大集合
- 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法
- 窗口函数和hive优化简记
- android封装方法js调用方法吗,common
- html定义盒子距离顶底端像素,css - 盒子内外边距
- 用engineercms建立项目管理平台
- SQLSERVER2008-数据库可疑的解决步骤
- 计算机网络实验二 VLAN间路由
- 树莓派 --- 控制舵机转动代码Python
- PHP--ThinkPHP6.0怎么打开debug模式
- 万物互联之边缘计算岗位分析
- Viddy排名App Store免费应用第二,力压InstagramDraw Sth
- 2015美亚杯团队赛
- Weka中数据挖掘与机器学习系列之Exploer界面(七)
- 02.图像分类任务介绍线性分类器(上).1080P