返回两个选项的总和,如果至少有一个不存在,则返回null

Pio*_*ski 1 java optional java-8

我如何使用Java Optional API以更优雅的方式重写以下代码:

first == null || second == null ? null : first + second;
Run Code Online (Sandbox Code Playgroud)

null如果两个变量中的任何一个是null或其他地方的总和,则代码应该返回.

hol*_*ava 9

我可以理解,也许你开始学习如何操作Optional.这个怎么样?

String result = 
    Optional.ofNullable(first)
            // v--- the trick is use the `flatMap` here.
            .flatMap(left -> Optional.ofNullable(second).map(right-> left + right))
            .orElse(null);
Run Code Online (Sandbox Code Playgroud)

  • 不要用Optional包装所有东西,这不是它的目的.是**更可****更优雅**? (4认同)
  • 虽然这是OP想要的,但我认为值得一提的是,`Optional`的意思是使用更少的`null`s,因此用`.orElse(null)`展开值是代码气味. (4认同)
  • @AndrewTobilko我听说'Optional`不应该用于*方法链接*,但是这是我第一次听到它不应该用来包装一些值.那我们该怎么用呢? (2认同)
  • @pivovarit关于使用三元运算符也是如此.为什么不更好地使用if/else结构?没有关于如何解决问题的规则.使用您喜欢的任何API.如果它表达得更好,那么其他人可以更容易理解你的意图.但是,使用新的API,总会有差距,因为社区并不习惯.请不要误解我,我认为三元运算符最适合我.只是我认为我们应该给新API提供机会,然后根据其实际利弊进行选择. (2认同)