我正在尝试使用 IntStream 来增加流外部的int值。此方法的目的是查找相同位置上是否存在不相等的字符。 n和单词字符串长度相同。
当我尝试在forEach的范围内递增计数器时,它向我显示它应该是最终的或有效的最终。任何人都可以建议一个更好的方法来做这个或增加这个计数器的方法吗?
public boolean check(String n,String word){
int counter=0;
IntStream.range(0, n.length())
.forEach(z->{
if(n.charAt(z)!=word.charAt(z)){
counter++;
}
});
if(counter>1)
return false;
else
return true;
}
答案 0 :(得分:9)
有一种方法可以做你想要的,而不需要保留counter
变量:
public boolean check(String n, String word) {
long count = IntStream.range(0, n.length())
.filter(i -> n.charAt(i) != word.charAt(i))
.limit(2) // short-circuit here!
.count();
return count <= 1;
}
这就像其他答案一样。唯一的区别是,如果我们已经找到2个不同的字符,我正在使用limit(2)
短路流。
答案 1 :(得分:8)
您不应使用forEach
来计算事件数,而应使用内置的count
方法。
public boolean check(String n, String word){
int counter = (int)IntStream.range(0, n.length())
.filter(z -> n.charAt(z) != word.charAt(z)).count();
return counter <= 1;
}
答案 2 :(得分:0)
您可以将counter
声明为实例变量。有关详情,请阅读my another answer关于有效的最终。
class Test {
private int counter = 0;
public boolean check(String n,String word){
IntStream.range(0, n.length())
.forEach(z->{
if(n.charAt(z) != word.charAt(z)) {
counter++;
}
});
return counter <= 1;
}
}