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

时间:2016-09-26 21:58:29

标签: java lambda optional

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

而不是做类似的事情:

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

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

我正在尝试类似的事情:

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

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

5 个答案:

答案 0 :(得分:7)

你需要做两件事:

  1. 将您的Optional<MyObject>变为Optional<String>,如果原始的Optional具有值,则该值为object.map(MyObject::toString)。您可以使用map执行此操作:Optional<String>(或您要使用的任何其他方法/功能)。
  2. 获取String myValue = object.map(MyObject::toString).orElse(null); 的字符串值,否则如果Optional没有值,则返回默认值。为此,您可以使用orElse
  3. 结合这些:

    <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)

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

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);