gpt4 book ai didi

java - 了解Options.orElse

转载 作者:行者123 更新时间:2023-12-01 21:30:41 25 4
gpt4 key购买 nike

我正在尝试学习Java 8 功能可选。我对Optional.orElse的工作原理感到困惑。这是我尝试过的:

public class OptionalsExample {

public static void main(String[] args) {
Name userName = new Name();
userName.setName("John Doe");
Optional<Name> optionalName = Optional.ofNullable(userName);
optionalName.ifPresent(
(Name value) -> {
Optional<String> optionalNameString = Optional.ofNullable(value.getName());
optionalNameString.ifPresent(name -> System.err.println("Name is: " + optionalNameString.get()));
}
);
}
private static void printError() {
System.err.println("No Name present");
}
}

我担心的是,如果设置了名称,一切正常,但是当没有设置名称时,我想执行orElse。当我发表评论时我想做点什么

userName.setName("John Doe");

就像打印未找到名称

我怎样才能做到这一点?

TIA

最佳答案

您对嵌套 ifPresent 的使用调用与(嵌套)forEach 非常相似对流的调用,在很多其他问题中都可以看到。

它们是一个明确的信号,表明您应该更好地尝试函数式思维。

你想做的是

System.out.println(
Optional.ofNullable(userName) // will be an empty optional if userName is null
.map(Name::getName) // will turn to empty optional if getName returns null
.map("Name is: "::concat) // prepend "Name is: " (only when we have a name)
.orElse("No Name Found") // get the result string or the alternative
);

要理解的重要一点是 map ping 步骤应用于空 Optional除了返回一个空的 Optional 之外什么都不做再次。由于您想在任何一种情况下进行打印,因此打印语句不会作为使用者传递,而是作为独立语句编写,打印orElse返回的值。调用,这将是非 null处理步骤或替代方案的结果String .

关于java - 了解Options.orElse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37485166/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com