如果存在,则将Optional的值分配给变量

chr*_*003 11 java lambda optional

嗨,我正在使用Java Optional.我看到Optional有一个方法ifPresent.

而不是做这样的事情:

Optional<MyObject> object = someMethod();
if(object.isPresent()) {
    String myObjectValue = object.get().getValue();
}
Run Code Online (Sandbox Code Playgroud)

我想知道如何使用Optional.ifPresent()将值赋给变量.

我在尝试这样的事情:

String myValue = object.ifPresent(getValue());
Run Code Online (Sandbox Code Playgroud)

我需要什么lambda函数来获取赋值给该变量的值?

Com*_*nte 10

您可以使用#orElseorElseThrow来提高代码的可读性.

Optional<MyObject> object = someMethod();
String myValue = object.orElse(new MyObject()).getValue();
Run Code Online (Sandbox Code Playgroud)
Optional<MyObject> object = someMethod();
String myValue = object.orElseThrow(RuntimeException::new).getValue();
Run Code Online (Sandbox Code Playgroud)

  • `object.orElse(new MyObject()).getValue()` 将*总是*创建`MyObject`的新实例。相反,使用`object.orElseGet(..)` 会更好,它接受一个将被懒惰评估的*function*。 (3认同)

Opt*_*nal 10

很晚但我做了以下:

String myValue = object.map(x->x.getValue()).orElse("");
                           //or null. Whatever you want to return.
Run Code Online (Sandbox Code Playgroud)


ysh*_*vit 7

你需要做两件事:

  1. 把你Optional<MyObject>变成一个Optional<String>,如果原来的Optional有一个值,它就有一个值.您可以使用map:( object.map(MyObject::toString)或您想要使用的任何其他方法/功能)来执行此操作.
  2. 获取您的String值Optional<String>,否则如果Optional没有值,则返回默认值.为此,你可以使用orElse

结合这些:

String myValue = object.map(MyObject::toString).orElse(null);
Run Code Online (Sandbox Code Playgroud)

  • `map()`和`orElse()`的好解释.+1.在评论中,OP说使用`null`作为默认值,但我强烈建议使用非null值.如果使用`null`作为默认值,那么`myValue`的下游用户将编写额外的代码来防范它. (2认同)