[英]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.