了解 Optionals.orElse
Understanding Optionals.orElse
我正在尝试学习 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");
喜欢打印 No Name Found
我该怎么做?
TIA
orElse 方法允许您在 Optional 中没有替代值时return一个替代值。
如果您只想打印出一个替代字符串,您可以使用 orElse 方法 return 一个替代字符串:
Optional<String> optionalNameString = Optional.ofNullable(value.getName());
System.out.println(optionalNameString.orElse("Name is not present"));
否则,您可以使用 isPresent()
检查该值是否存在
Optional<String> optionalNameString = Optional.ofNullable(value.getName());
if(optionalNameString.isPresent()) {
// do something
} else {
//do something else
}
您对嵌套 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
);
要理解的重要一点是,应用于空 Optional
的 map
ping 步骤除了再次 return 空 Optional
之外什么都不做.由于你想在任何一种情况下打印,打印语句不是作为消费者传递的,而是作为独立语句编写的,打印由 orElse
调用编辑的值 return,这将是处理步骤的非 null
结果或替代 String
.
我正在尝试学习 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");
喜欢打印 No Name Found
我该怎么做?
TIA
orElse 方法允许您在 Optional 中没有替代值时return一个替代值。
如果您只想打印出一个替代字符串,您可以使用 orElse 方法 return 一个替代字符串:
Optional<String> optionalNameString = Optional.ofNullable(value.getName());
System.out.println(optionalNameString.orElse("Name is not present"));
否则,您可以使用 isPresent()
检查该值是否存在Optional<String> optionalNameString = Optional.ofNullable(value.getName());
if(optionalNameString.isPresent()) {
// do something
} else {
//do something else
}
您对嵌套 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
);
要理解的重要一点是,应用于空 Optional
的 map
ping 步骤除了再次 return 空 Optional
之外什么都不做.由于你想在任何一种情况下打印,打印语句不是作为消费者传递的,而是作为独立语句编写的,打印由 orElse
调用编辑的值 return,这将是处理步骤的非 null
结果或替代 String
.