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

Assign value of Optional to a variable if present

您好,我正在使用 Java 可选。我看到 Optional 有一个方法 ifPresent。

而不是像这样做:

Optional<MyObject> object = someMethod();
if(object.isPresent()) {
    String myObjectValue = object.get().getValue();
}

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

我正在尝试类似的方法:

String myValue = object.ifPresent(getValue());

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

您可以使用 #orElse or orElseThrow 来提高代码的可读性。

Optional<MyObject> object = someMethod();
String myValue = object.orElse(new MyObject()).getValue();

Optional<MyObject> object = someMethod();
String myValue = object.orElseThrow(RuntimeException::new).getValue();

你需要做两件事:

  1. 将你的 Optional<MyObject> 变成一个 Optional<String>,它有一个值当且仅当原始 Optional 有一个值。您可以使用 mapobject.map(MyObject::toString)(或您想要使用的任何其他 method/function)来执行此操作。
  2. 获取 Optional<String> 的字符串值,否则 return 如果 Optional 没有值,则为默认值。为此,您可以使用 orElse

结合这些:

String myValue = object.map(MyObject::toString).orElse(null);

很晚了,但我做了以下事情:

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

可选 l = stream.filter..... // java 8 流条件

        if(l!=null) {
            ObjectType loc = l.get();
            Map.put(loc, null);
        }

.findFirst()returns一个Optional<MyType>,但是如果我们加上.orElse(null)它returns可选ifisPresent()的get,那是 (MyType),否则是 NULL

MyType s = newList.stream().filter(d -> d.num == 0).findFirst().orElse(null);