java – 自动更新布尔值
作者:互联网
完整代码:
http://pastebin.com/UghV3xdT
我有两个几乎相同的方法,只能用一个if语句来区分:if(k%3!= 1)和if(k%2 == 0).
int k = 0;
while(k<50){
if(k % 3 != 1){ // OR if(k % 2 == 0)
// Code logic goes here
k++;
}
}
每种情况的使用由阵列的长度决定,这意味着特定情况只需要确定一次. ‘k’表示另一个数组的索引,50表示此Array的长度.
我可以编写类似if(foo> 1?k%3!= 1:k%2 == 0)的东西,但这需要程序在每次循环运行时执行操作.
在某种程度上,我想要一种更新布尔值.有没有办法做到这一点,或者这是传值的缺点?我应该保留两种单独的方法,还是使用三元运算符?
本质上,我正在寻找一个包含表达式而不是值的类型.
解决方法:
在Java 8中,有一个很好的功能接口叫做IntPredicate.如果将它与lambda表达式结合使用,则可以实现无需重复,额外代码或任何减速的目标:
public final class Example {
public static void main(String[] args) {
//Instead of randomly choosing the predicate, use your condition here
Random random = new Random();
IntPredicate intPredicate = random.nextBoolean() ? i -> i % 2 == 0 : i -> i % 3 != 1;
int k = 0;
while(k<50){
/*
*At this point the predicate is either k%2==0 or k%3!=1,
* depending on which lambda you assigned earlier.
*/
if(intPredicate.test(k)){
// Code logic goes here
k++;
}
}
}
}
PS:请注意,我使用随机布尔值在谓词之间切换,但您可以使用任何条件
标签:java,boolean,pass-by-reference,pass-by-value 来源: https://codeday.me/bug/20190828/1756714.html