我有一个整数列表,每个整数都映射到一个布尔值:
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)这似乎太复杂了。有没有简便的方法?
答案 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);