我们可以在Optional上使用map,据我所知,它对Optional包装的对象返回方法调用的值。如果我错了,请纠正我!
假设我们有一个人班。
class Person{
String name;
Person(String name){
this.name = name;
}
public String getName(){
return this.name;
}
}
// Now the main class.
class Main {
Optional<Person> oPerson = Optional.nullable( personService.getPerson());
Optional<String> oName = oPerson.map(p -> p.getName()); // I will get a String value wrapped in the Optional.
System.out.println("It will not print a name" + oName);
String name = oPerson.map(person -> person.getName()).orElse("anonymous");// I will get a String in return for this call, not an Optional object in return.
System.out.println("Name will be printed -->" + name);
}
我是说为什么我们应该在第一个调用中得到一个Optional包装的对象,而在第二个调用中得到一个字符串?或者我的理解存在差距,请在这里说明一下。
如评论“ orElse”中提到的那样命名有点不好。它的内部逻辑最好用“ getOrElseGet(...)”之类的东西来描述,因为它隐式地尝试返回可选值中包含的值。
请参见java.util.Optional#orElse
:
public T orElse(T other) {
return value != null ? value : other;
}
根据方法map(Function<? super T,? extends U> mapper)
的Java文档,>
如果存在值,则将提供的映射函数应用于它,然后如果结果为非null,则返回描述结果的Optional。
根据设计
Optional
表示可能存在或可能不存在值。如果不是这样,则map()
方法别无选择,只能运行输入lambda并返回Optional.empty()