Java 如果没有匹配项,则返回方法中的默认值
我有一个方法可以找到一个操作符并返回新的位置Java 如果没有匹配项,则返回方法中的默认值,java,java-8,java-stream,Java,Java 8,Java Stream,我有一个方法可以找到一个操作符并返回新的位置 public Integer findToken(Character operator) { try { return tokenList.stream() .filter(x -> { return x.position >= startPosition && x.pos
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;
}
}
如何返回旧值?我尝试用方法中的值指定一个新参数,并在异常中传递它,但代码看起来很难看。有更好的方法吗?您可能需要使用orElse() 例如
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);
List values=Arrays.asList(2,4,5,6,7,1);
整数i=values.stream()
.filter(x->x以这种方式进行赋值,除非将旧值作为参数传递,否则是不可能的
您可以做的是将赋值更改为使用可选
来处理空
情况:
Optional.ofNullable(findToken('*'))
.ifPresent(pos -> startPosition = pos);
此外,使用可选
使方法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);
}
除非可以证明存在匹配项(例如,isPresent()已返回true),否则不应使用可选的.get()。您应该使用安全方法之一,orElse、orElseThrow、ifPresent等。在这里,您只需关闭isPresent即可。
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);