有没有办法将 Java8 Optional 返回转换后的值与在 null 上打印消息结合起来?

Is there a way to combine Java8 Optional returning a transformed value with printing a message on 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 可选返回值与在 null 上打印消息相结合?

请注意,这与 不同,因为我在值存在的情况下进行了额外的转换。

我希望这对你有用

String startingValue = getMyValue();
return Optional.ofNullable(startingValue)
               .map(value ->Arrays.asList(startingValue.split(",")))
               .orElseGet(()->{
                   System.out.println("Value was null");
                   return null;
                }); 

正如@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);
    }
}