Java 为变量(如果存在)分配可选值
嗨,我使用Java可选。我看到可选的有一个方法ifPresent 而不是像这样做:Java 为变量(如果存在)分配可选值,java,lambda,optional,Java,Lambda,Optional,嗨,我使用Java可选。我看到可选的有一个方法ifPresent 而不是像这样做: Optional<MyObject> object = someMethod(); if(object.isPresent()) { String myObjectValue = object.get().getValue(); } 我需要什么样的lambda函数才能获得分配给该变量的值 您可以使用或来提高代码的可读性 Optional object=someMethod(); 字符串my
Optional<MyObject> object = someMethod();
if(object.isPresent()) {
String myObjectValue = object.get().getValue();
}
我需要什么样的lambda函数才能获得分配给该变量的值
您可以使用或来提高代码的可读性
Optional object=someMethod();
字符串myValue=object.orElse(新的MyObject()).getValue();
Optional object=someMethod();
字符串myValue=object.orelsetrow(RuntimeException::new).getValue();
您需要做两件事:
Optional
转换为Optional
,如果原始Optional具有值,则该值具有值。您可以使用:object.map(MyObject::toString)
(或者您想要使用的任何其他方法/函数)来完成此操作可选项的字符串值,或者如果可选项没有值,则返回默认值。为此,您可以使用
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….//Java8流条件
if(l!=null) {
ObjectType loc = l.get();
Map.put(loc, null);
}
.findFirst()
返回一个可选的,但是如果我们添加.orElse(null)
,它将返回可选的ifisPresent()
,即(MyType
),否则返回一个null
MyType s = newList.stream().filter(d -> d.num == 0).findFirst().orElse(null);
如果你的myValue
行想说什么呢?“如果对象有一个值,那么myValue是某个无关函数getValue()的结果。”?如果是这样的话,那么如果对象没有值会发生什么——那么您希望myValue
是什么呢?我的可选项中的MyObject类有一个getter,它将返回myValue,因此我肯定知道如果可选项不是空的,则存在一个值。getValue()中的值永远不能为null/未定义,但如果可选值为空,则应为myValue分配什么?您可以使用三元形式(如String myValue=object.isPresent())简化if语句?object.get().getValue():“一些默认字符串”
,但您仍然必须提供object.isPresent()
返回false的情况。这种情况违背了可选
的目的。在第一种情况下,当我需要字符串时,您返回MyObject类型的对象。第二个可以正常工作。object.orElse(new MyObject()).getValue()
将始终创建MyObject
的新实例。相反,最好使用object.orElseGet(..)
,它接受一个将被延迟计算的函数。这是对map()
和orElse()
的很好解释+1.在评论中,OP说使用null
作为默认值,但我强烈建议使用非null值。如果将null
用作默认值,则myValue
的下游用户将不得不编写额外的代码来防范它。
MyType s = newList.stream().filter(d -> d.num == 0).findFirst().orElse(null);