编程语言
首页 > 编程语言> > java – 自动更新布尔值

java – 自动更新布尔值

作者:互联网

语境:
https://www.reddit.com/r/dailyprogrammer/comments/4wqzph/20160808_challenge_278_easymed_weave_insert_part_1/

完整代码:
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