簡體   English   中英

如果沒有匹配,則返回方法中的默認值

[英]Returning default value in method if there are no matches

我有一個方法,將找到一個運算符並返回新的位置。

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

我如何返回舊值? 我嘗試使用方法中的值給出一個新參數,並將其傳遞給異常,但代碼看起來很難看。 有沒有更好的辦法 ?

以這種方式進行分配,除非您將舊值作為參數傳遞,否則無法進行分配。

您可以做的是更改賦值以使用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);

您可能想要使用orElse()方法。
將結果存儲到臨時變量中的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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM