shazh520
V2EX  ›  Java

Java 8 Optional 的使用问题

  •  
  •   shazh520 · Oct 26, 2018 · 4690 views
    This topic created in 2939 days ago, the information mentioned may be changed or developed.
    for (Object param : params) {
        if (param == null) {
            throw new ParamException("缺少参数");
        }
    }
    

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

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

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

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

    你这几天看完,让我感觉我的智商有问题 。。。T T
    abeholder
    abeholder
    Oct 26, 2018
    12
    接上楼 ,

    而且我看这本书之前,学过段时间函数式编程 ,看到函子那一块就没怎么看了。。。
    TaoSama
    TaoSama
    Oct 27, 2018 via Android
    13
    @abeholder 这种书类似于闲书嘛,又不写笔记,一天 50 ~ 100 页吖
    optional localdate forkjoin 都很值得看 最后面还介绍了函数式语言是啥样的很爽啊
    thinking in Java 我确实看了很久 1000 多页毕竟
    TaoSama
    TaoSama
    Oct 27, 2018 via Android
    14
    @abeholder 我每天上班来的时候看 1 ~ 2h 晚饭后再看一会儿
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3784 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 09:59 · PVG 17:59 · LAX 01:59 · JFK 04:59
    ♥ Do have faith in what you're doing.