基本方法:

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 相关用法相关推荐

  1. Java中Date各种相关用法

    Java中Date各种相关用法 本文主要介绍Java中Date各种相关用法. AD:   Java中Date各种相关用法(一) 1.计算某一月份的最大天数 Java代码 Calendar time=C ...

  2. java attributes用法_C#中的Attributes的用法

    今天研究了一下C#中的Attributes的用法,感觉很有用,现总结以下: 在前台用JS写的脚本方法,除了可以直接用在前台控件的属性中,还可以在后台运用. 即在后台页面加载时,调用JS方法.语法格式有 ...

  3. oracle中rollback用法,Oracle中SAVEPOINT和ROLLBACK用法

    savepoint是事务内部允许部分rollback的标志符.因为事务中对记录做了修改,我们可以在事务中创建savepoint来标识不同的点.如果遇到错误,就可以rollback到不同的点或直接回来事 ...

  4. python中divmod函数的用法_Python中divmod函数的用法

    Python中divmod函数的用法,语言,余数,是一种,面向对象,函数 Python中divmod函数的用法 Python中divmod函数的用法 在Python中divmod函数的作用是把除数和余 ...

  5. java sendmessage函数_vc中SendMessage自定义消息函数用法实例

    本文实例讲述了vc中SendMessage自定义消息函数用法,分享给大家供大家参考.具体如下: SendMessage的基本结构如下: SendMessage( HWND hWnd,  //消息传递的 ...

  6. java 有趣注释_Java8 中有趣酷炫的小技巧

    https://mp.weixin.qq.com/s/ZlbcfT-fUoVEctSqBeZWcg Java8 中有趣酷炫的小技巧 执行注释 大多数开发人员认为 注释 永远不会在程序中执行,并用于帮助 ...

  7. python中int用法,Python中int()函数的用法浅析

    int()是Python的一个内部函数 Python系统帮助里面是这么说的 >>> help(int) Help on class int in module __builtin__ ...

  8. linux中ftp的用法,linux中的ftp命令用法(7页)-原创力文档

    第 第 PAGE 1 页 共 NUMPAGES 1 页 linux中的ftp命令用法 Linux系统中的ftp命令功能强大,那么它的具体用法是怎样呢?下面由小编为大家整理了linux中的ftp命令用法 ...

  9. python的继承用法_python中继承有什么用法?python继承的用法详解

    本篇文章给大家带来的内容是关于python中继承有什么用法?python继承的用法详解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 面向对象三大特征 1.封装:根据职责将属性和方法 ...

最新文章

  1. 我的世界最新版本生存服务器ip,我的世界服务器古风小阁IP|纯净生存(1.15.2)
  2. LeetCode 468 validate ip address(正则表达式)
  3. plsql动态的sql
  4. x_html语言名词解释,第2章++XHTML标记语言(97页)-原创力文档
  5. DevC++最新汉化版(支持C++11)
  6. android 学习链接大集合
  7. 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法
  8. 窗口函数和hive优化简记
  9. android封装方法js调用方法吗,common
  10. html定义盒子距离顶底端像素,css - 盒子内外边距
  11. 用engineercms建立项目管理平台
  12. SQLSERVER2008-数据库可疑的解决步骤
  13. 计算机网络实验二 VLAN间路由
  14. 树莓派 --- 控制舵机转动代码Python
  15. PHP--ThinkPHP6.0怎么打开debug模式
  16. 万物互联之边缘计算岗位分析
  17. Viddy排名App Store免费应用第二,力压InstagramDraw Sth
  18. 2015美亚杯团队赛
  19. Weka中数据挖掘与机器学习系列之Exploer界面(七)
  20. 02.图像分类任务介绍线性分类器(上).1080P

热门文章

  1. 深入了解iSCSI的2种多路径访问机制
  2. 比特币现金与比特币呈竞争关系 分析表示加密货币之间的竞争不是坏事
  3. oracle中怎么查看存储过程的源码
  4. 冲刺第九天 12.5 WED
  5. 勒索病毒爆发,WFilter教你如何应对?
  6. gnupg环境搭建时遇到的问题
  7. 木棍分割[HAOI2008]
  8. linux配置java环境变量 转过几个,这个最详细和靠谱
  9. 一天中每个小时段我都起来过,都睡过。
  10. CSS Sprites (转)