Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当需要对结果调用方法时,如何使用orElse?_Java_Java Stream_Optional - Fatal编程技术网

Java 当需要对结果调用方法时,如何使用orElse?

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

我有以下代码。我试图找到一种避免使用if(something.isPresent())行的方法,并声明
可选的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,但我猜他们也考虑过:)