Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.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 如果没有匹配项,则返回方法中的默认值_Java_Java 8_Java Stream - Fatal编程技术网

Java 如果没有匹配项,则返回方法中的默认值

Java 如果没有匹配项,则返回方法中的默认值,java,java-8,java-stream,Java,Java 8,Java Stream,我有一个方法可以找到一个操作符并返回新的位置 public Integer findToken(Character operator) { try { return tokenList.stream() .filter(x -> { return x.position >= startPosition && x.pos

我有一个方法可以找到一个操作符并返回新的位置

public Integer findToken(Character operator) {
    try {
        return tokenList.stream()
                .filter(x -> {
                    return x.position >= startPosition &&
                            x.position <= endPosition &&
                            x.operator == operator;
                })
                .findFirst().get()
                .position;
    } catch (Exception ex) {
        return null;
    }
} 

如何返回旧值?我尝试用方法中的值指定一个新参数,并在异常中传递它,但代码看起来很难看。有更好的方法吗?

您可能需要使用orElse() 例如

    List<Integer> values = Arrays.asList(2, 4, 5, 6, 7, 1); 
    Integer i= values.stream()
                     .filter(x->x<1)
                     .findFirst().orElse(0);

    System.out.println(i);
List values=Arrays.asList(2,4,5,6,7,1);
整数i=values.stream()

.filter(x->x以这种方式进行赋值,除非将旧值作为参数传递,否则是不可能的

您可以做的是将赋值更改为使用
可选
来处理
情况:

Optional.ofNullable(findToken('*'))
        .ifPresent(pos -> startPosition = pos);
此外,使用
可选
使方法
findToken
可能不返回值变得更加明确,这将更有意义:

public Optional<Integer> findToken(Character operator) {
    return tokenList.stream()
            .filter(x ->
                 x.position >= startPosition &&
                 x.position <= endPosition &&
                 x.operator == operator
            )
            .findFirst()
            .map(t -> t.position);
}

除非可以证明存在匹配项(例如,isPresent()已返回true),否则不应使用可选的.get()。您应该使用安全方法之一,orElse、orElseThrow、ifPresent等。在这里,您只需关闭isPresent即可。
public Optional<Integer> findToken(Character operator) {
    return tokenList.stream()
            .filter(x ->
                 x.position >= startPosition &&
                 x.position <= endPosition &&
                 x.operator == operator
            )
            .findFirst()
            .map(t -> t.position);
}
findToken('*').ifPresent(pos -> startPosition = pos);