すべての要素がブール値にマップされる整数のリストがあります。
ArrayList<Integer> listOfIntegers = ...;
Function<Integer, Boolean> crazyFunction = new Function<Integer, Boolean>() {
@Override
public Boolean apply(Integer integer) {
return false;
}
};;
今、私はforループで反復しており、crazyFunction
反復ごとに更新されます。更新では、1つの関数値を変更するだけです。つまり、(疑似コードで)次のようなものが必要です。
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)これは複雑すぎるようです。簡単な方法はありませんか?
たぶんあなたが実際に欲しいのは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);
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加