例如,我们有一个包含一些字段的简单类。假设我们有一个名为"name"和"id"的字段。我想获取具有指定 id 的对象的名称并返回一些 defaultName,如果没有这样的对象:
private List<MyObject> myObjects;
public String findFieldById(int id) {
MyObject matchingObj = myObjects.stream()
.filter(m -> m.getId() == id)
.findFirst().orElse(null);
return (matchingObj == null) ? "defaultName" : matchingObj.getName();
}
我的问题是我如何才能轻松地在一行中对流中的 null 进行此检查?
您可以在
一个管道中执行此类操作,方法是映射到MyObject::getName
之后findFirst
否则通过orElse
提供默认值。
return myObjects.stream()
.filter(m -> m.getId() == id)
.findFirst()
.map(MyObject::getName)
.orElse("defaultName");
你不会被迫使用流,一个简单的带有if语句的java for循环也可以做到这一点:
public String findFieldById(int id) {
// iterate over all objects
for(MyObject myObject : myObjects){
// if an object's id matches the given parameter
if(myObject.getId() == id){
// we will return its name
return myObject.getName();
}
}
// if nothing was found we will return the default
return "defaultName";
}