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

lig*_*eed 3 java java-8 java-stream

我有一个方法可以找到一个运算符并返回新位置。

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;
    }
} 
Run Code Online (Sandbox Code Playgroud)

但如果没有匹配项,我希望它保留旧值。

startPosition = findToken(Operator.value);
Run Code Online (Sandbox Code Playgroud)

我如何返回旧值?我尝试用方法中的值提供一个新参数并将其传递到异常中,但代码看起来很丑陋。有没有更好的办法 ?

Shu*_*sia 5

您可能想使用orElse()方法。
将结果存储到临时变量中直到f​​indFirst,然后执行其他操作并返回。
例如

    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);
Run Code Online (Sandbox Code Playgroud)