首页 > 解决方案 > 有没有办法将 Java8 Optional 返回转换后的值与在 null 上打印消息相结合?

问题描述

我从这段代码开始:

String startingValue = getMyValue();
List<String finishingValue = new ArrayList;
if (startingValue != null) {
    finishingValue = Arrays.asList(startingValue.split());
} else {
    System.out.println("Value was null");
}

我想使用 Java 8 选项将其转换为如下内容:

Optional<String> startingOptional = getMyOptional();
List finishingValue =
        startingOptional
                .map(value -> Arrays.asList(value.split(",")))
                .orElseGet(() -> {
                    System.out.println("value not found"); 
                    return "";
                });

现在我可以做到这一点 - 但它并没有真正让它变得更简单。

    Optional<String> startingValue = getMyValue();
    String finishingValue = startingValue
            .orElseGet(() -> {
        System.out.println("value not found");
        return "";
    });
    List<String> finishingValueList = new ArrayList();
    if (startingValue.isPresent()) {
        finishingValueArray = startingValue.get().split(",");
        finishingValueList = Arrays.asList(finishingValueArray);
    }

我的问题是:有没有办法将 Java8 Optional 返回值与在 null 上打印消息相结合?

请注意,这与这个问题不同,因为我在 value is present 的情况下进行了额外的转换。

标签: javajava-8nulloptional

解决方案


正如@Deadpool(伟大的名字!)所建议的那样:

import java.util.*;

class Playground {
    public static void main(String[ ] args) {
        Optional<String> startingOptional = Optional.ofNullable(null);
        List<String> finishingValue =
                startingOptional
                    .map(value -> Arrays.asList(value.split(",")))
                    .orElseGet(() -> {
                        System.out.println("value not found"); 
                        return new ArrayList<String>();
                    });
        System.out.println("finishingValue: " + finishingValue);
    }
}

推荐阅读