Java 当需要对结果调用方法时,如何使用orElse?
我有以下代码。我试图找到一种避免使用if(something.isPresent())行的方法,并声明Java 当需要对结果调用方法时,如何使用orElse?,java,java-stream,optional,Java,Java Stream,Optional,我有以下代码。我试图找到一种避免使用if(something.isPresent())行的方法,并声明可选的something。相反,我希望链接Optional.orElse()方法并直接返回结果。但我似乎找不到方法,因为如果找不到元素,该方法需要返回null,如果找到了元素,则需要在返回之前对其调用方法 有更好的方法吗 import java.util.ArrayList; import java.util.List; import java.util.Optional; public cl
可选的something
。相反,我希望链接Optional.orElse()
方法并直接返回结果。但我似乎找不到方法,因为如果找不到元素,该方法需要返回null,如果找到了元素,则需要在返回之前对其调用方法
有更好的方法吗
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
public class OrElseWhat {
private class Something {
private String it;
Something(String it) { this.it = it; }
String getIt() { return it; }
}
private List<Something> somethings = new ArrayList<Something>() {
{
add(new Something("one"));
add(new Something("two"));
add(new Something("three"));
}
};
public String getFourOrNull() {
Optional<Something> something = somethings.stream()
.filter(s -> s.getIt().equals("four"))
.findAny();
if (something.isPresent()) {
return something.get().getIt();
}
return null;
}
}
import java.util.ArrayList;
导入java.util.List;
导入java.util.Optional;
公共课还是什么{
私人阶级{
私人串吧;
Something(String it){this.it=it;}
字符串getIt(){返回它;}
}
private List somethings=new ArrayList(){
{
添加(新事物(“一”);
添加(新的东西(“两”);
添加(新事物(“三”);
}
};
公共字符串getFourUrl(){
可选的something=something.stream()
.filter(s->s.getIt().equals(“四”))
.findAny();
如果(something.isPresent()){
返回某物。get()。getIt();
}
返回null;
}
}
当值仍处于可选
格式时,可以使用map
调用该方法:
public String getFourOrNull() {
return somethings.stream()
.filter(s -> s.getIt().equals("four"))
.findAny()
.map(Something::getIt)
.orElse(null);
}
从地图
中:
如果存在值,则对其应用提供的映射函数,如果结果为非null,则返回描述结果的可选值。否则,返回一个空的可选值
也就是说,如果可以的话,听@Aaron并放下
orElse
,这样getFourOrNull
就会返回可选的。在使用Optional
的代码库中,任何方法都不应返回null
。我认为您应该将方法的签名更改为Optional
,并始终返回某些内容
可选
是针对这种情况而设计的:它们可以避免返回一些非特定的值(可能是null
?或”
?或-1
),并且非常清楚地描述了从签名开始可能返回某种类型,但并不总是如此。我知道。不幸的是,在这种情况下,我不能返回可选的。无论谁使用它都需要空值。太好了!我以为map会得到一个NPE,但我猜他们也考虑过:)