我有一个方法可以找到一个运算符并返回新的位置。
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);
我如何返回旧值?我尝试使用方法中的值给出一个新参数,并将其传递给异常,但代码看起来很难看。还有更好的方法吗?
答案 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);