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

时间:2015-08-09 14:00:37

标签: 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;
    }
} 

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

startPosition = findToken(Operator.value);

我如何返回旧值?我尝试使用方法中的值给出一个新参数,并将其传递给异常,但代码看起来很难看。还有更好的方法吗?

2 个答案:

答案 0 :(得分:4)

以这种方式进行分配,除非您将旧值作为参数传递,否则无法进行分配。

您可以做的是更改作业以使用Optional来处理null案例:

Optional.ofNullable(findToken('*'))
        .ifPresent(pos -> startPosition = pos);

此外,使用Optional更明确地说方法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);
}

在这种情况下,作业将是:

findToken('*').ifPresent(pos -> startPosition = pos);

答案 1 :(得分:3)

您可能想要使用或Else()方法。
将结果存储到临时变量中的 findFirst ,然后执行其他操作并返回。
对于实例

    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);