如何更改布尔值Java函数中的一个函数值?

时间:2019-02-15 18:54:00

标签: java

我有一个整数列表,每个整数都映射到一个布尔值:

ArrayList<Integer> listOfIntegers = ...;
Function<Integer, Boolean> crazyFunction = new Function<Integer, Boolean>() {
        @Override
        public Boolean apply(Integer integer) {
            return false;
        }
    };;

现在,我在一个for循环中进行迭代,其中crazyFunction将在每次迭代中进行更新。更新将只修改一个函数值,即我想要类似(用伪代码)的内容:

crazyFunction_tmp(x) := IF x==c THEN true ELSE crazyFunction(x)
crazyFunction := crazyFunction_tmp

固定c

什么是做这件事的好风格?

编辑:也许添加一些细节可能会有所帮助。我尝试了以下方法:

crazyFunction = new Function<Integer, Boolean>() {
        @Override
        public Boolean apply(Integer integer) {
            if(integer == c)
                return true;
            else return crazyFunction.apply(integer);
        }
    };

但是(1)这不会编译,因为crazyFunction不是(也不应该)final,并且(2)这似乎太复杂了。有没有简便的方法?

1 个答案:

答案 0 :(得分:1)

也许您真正想要的是使用Predicate

Predicate<Integer> crazyFunction = x -> false;
for (Integer thisInteger : listOfIntegers) {
    crazyFunction = crazyFunction.or(Predicate.isEqual(thisInteger));
}

// Is a given integer one of our integers?
boolean isGoodInteger = crazyFunction.apply(42);