V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
shazh520
V2EX  ›  Java

Java 8 Optional 的使用问题

  •  
  •   shazh520 · 2018-10-26 10:48:44 +08:00 · 3497 次点击
    这是一个创建于 2254 天前的主题,其中的信息可能已经有所发展或是发生改变。
    for (Object param : params) {
        if (param == null) {
            throw new ParamException("缺少参数");
        }
    }
    

    像这样的非空判断,如果是换成一个包含 List 的 Optional 对象如何优雅的实现这个操作?

    14 条回复    2018-10-27 12:24:26 +08:00
    beny2mor
        1
    beny2mor  
       2018-10-26 10:54:08 +08:00
    Optional 不适合包 List。List 如果为空就表示“ empty ”这个含义。 应该不存在接口会返回 null 值或空 List 吧
    kaito
        2
    kaito  
       2018-10-26 10:55:38 +08:00
    if(params.stream().anyMatch(Objects::isNull)){
    throw new ParamException("缺少参数");
    }

    我可能会这么写
    shazh520
        3
    shazh520  
    OP
       2018-10-26 11:08:10 +08:00
    @kaito 学习了。比我的更优雅。
    519718366
        4
    519718366  
       2018-10-26 11:48:59 +08:00
    Optional 一般不会去包裹集合吧,一般在系统中,返回集合都是返回的空集合,不会去返回 null,阿里规约里也这么推荐的。
    所以 Optional 一般包裹单个可能为空的对象。
    honeycomb
        5
    honeycomb  
       2018-10-26 12:05:41 +08:00 via Android
    @shazh520 list 等集合的用 stream()好。

    空集合宁可用 Collections.emptyList 这种公共缓存对象也不用 null
    shazh520
        6
    shazh520  
    OP
       2018-10-26 13:04:57 +08:00 via Android
    @honeycomb 明白了。 如果只是说明 optional 对象一般不用来包含 list 的话,就不如说 list 用 stream 接口是更好的选择。我刚刚开始研究 optional,所以掉坑了。现在对 optional 和 stream 又加深了一点认识。谢谢。
    shazh520
        7
    shazh520  
    OP
       2018-10-26 13:06:24 +08:00 via Android
    @519718366 嗯嗯。学习了谢谢😂。确实是误用了。
    shazh520
        8
    shazh520  
    OP
       2018-10-26 13:09:35 +08:00 via Android
    刚开始学习 optional,习惯性的想去重构非空判断,掉坑了。
    TaoSama
        9
    TaoSama  
       2018-10-26 14:07:25 +08:00 via Android
    可以看一下 Java 8 in Action 了解一些 best practice,这本书几天就能看完很薄
    zealot0630
        10
    zealot0630  
       2018-10-26 15:00:56 +08:00
    optional 的目的之一就是让你永远不需要用 null,你理解一下,再看看你的代码
    abeholder
        11
    abeholder  
       2018-10-26 15:17:33 +08:00
    @TaoSama 300 多页啊 ,之前我平均每天花几个小时看,边练习边学,看了大半个月才看完的。。。

    你这几天看完,让我感觉我的智商有问题 。。。T T
    abeholder
        12
    abeholder  
       2018-10-26 15:20:49 +08:00
    接上楼 ,

    而且我看这本书之前,学过段时间函数式编程 ,看到函子那一块就没怎么看了。。。
    TaoSama
        13
    TaoSama  
       2018-10-27 12:23:44 +08:00 via Android
    @abeholder 这种书类似于闲书嘛,又不写笔记,一天 50 ~ 100 页吖
    optional localdate forkjoin 都很值得看 最后面还介绍了函数式语言是啥样的很爽啊
    thinking in Java 我确实看了很久 1000 多页毕竟
    TaoSama
        14
    TaoSama  
       2018-10-27 12:24:26 +08:00 via Android
    @abeholder 我每天上班来的时候看 1 ~ 2h 晚饭后再看一会儿
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4259 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:09 · PVG 18:09 · LAX 02:09 · JFK 05:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.