您好我正在使用Java Optional。我看到Optional有一个方法ifPresent。
而不是做类似的事情:
Optional<MyObject> object = someMethod();
if(object.isPresent()) {
String myObjectValue = object.get().getValue();
}
我想知道如何使用Optional.ifPresent()将值赋给变量。
我正在尝试类似的事情:
String myValue = object.ifPresent(getValue());
我需要lambda函数来获取分配给该变量的值吗?
答案 0 :(得分:7)
你需要做两件事:
Optional<MyObject>
变为Optional<String>
,如果原始的Optional具有值,则该值为object.map(MyObject::toString)
。您可以使用map
执行此操作:Optional<String>
(或您要使用的任何其他方法/功能)。String myValue = object.map(MyObject::toString).orElse(null);
的字符串值,否则如果Optional没有值,则返回默认值。为此,您可以使用orElse
结合这些:
<LiveStreamPacketizer>
<!-- Properties defined here will override any properties defined in
conf/LiveStreamPacketizers.xml for any LiveStreamPacketizers loaded by this applications -->
<Properties>
<Property>
<Name>cupertinoChunkDurationTarget</Name>
<Value>2000</Value>
<Type>Integer</Type>
</Property>
<Property>
<Name>cupertinoMaxChunkCount</Name>
<Value>2</Value>
<Type>Integer</Type>
</Property>
<Property>
<Name>cupertinoPlaylistChunkCount</Name>
<Value>2</Value>
<Type>Integer</Type>
</Property>
<Property>
<Name>cupertinoRepeaterChunkCount</Name>
<Value>2</Value>
<Type>Integer</Type>
</Property>
</Properties>
</LiveStreamPacketizer>
答案 1 :(得分:7)
很晚但我做了以下事情:
String myValue = object.map(x->x.getValue()).orElse("");
//or null. Whatever you want to return.
答案 2 :(得分:6)
您可以使用#orElse或orElseThrow来提高代码的可读性。
Optional<MyObject> object = someMethod();
String myValue = object.orElse(new MyObject()).getValue();
Optional<MyObject> object = someMethod();
String myValue = object.orElseThrow(RuntimeException::new).getValue();
答案 3 :(得分:0)
可选l = stream.filter ..... // Java 8流条件
if(l!=null) {
ObjectType loc = l.get();
Map.put(loc, null);
}
答案 4 :(得分:0)
.findFirst()
返回一个Optional<MyType>
,但是如果我们添加.orElse(null)
,则返回isPresent()
(即{MyType
)或{否则为NULL
MyType s = newList.stream().filter(d -> d.num == 0).findFirst().orElse(null);