混雑する :
私は春のブートアプリケーションを持っているし、我々はそれに機能フラグのセットでapplication.ymlを持っています
featureFlag:
featureOne:true
featureTwo:true
featureThree:true
featureFour:false
その後、このファイルは、このクラスによって読み取られます
@Configuration
@ConfigurationProperties(prefix="featureFlag")
public class FeatureFlag{
private Boolean featureOne;
private Boolean featureTwo;
private Boolean featureThree;
private Boolean featureFour;
/*The predicates based on the feature flags*/
private Predicate<FeatureFlag> isFeatureFlagOneEnabled = featureFlag.isFeatureOne();
private Predicate<FeatureFlag> isFeatureFlagTwoEnabled = featureFlag.isFeatureTwo();
private Predicate<FeatureFlag> isFeatureFlagThreeEnabled = featureFlag.isFeatureThree();
private Predicate<FeatureFlag> isFeatureFlagFourEnabled = featureFlag.isFeatureFour();
}
私は、関数の戻り値を、私は、実際の述語と反復それらの一つ一つを渡したいが、私は一般的な機能を行うことができます場合、私はテストするために、その値と述語のリストを渡すことを知りたいし、それらのすべてが該当する場合、真、そうでない場合はfalse
それから私は、オンデマンドでこのリストを生成したいので、このクラスでは、このようにいくつかのコードを追加し、たとえば私は、クライアントがその購入featureOneとfeatureTwoを持っxは、この例では私はこのようなリストを作成
Set<Predicate<FeatureFlag>> rulesForClientX = new HashSet<>();
rulesForClientX.add(isFeatureFlagOneEnabled);
rulesForClientX.add(isFeatureFlagTwoEnabled);
それから私は、そのクライアントのために特定のロジックを作成し、それを以前に作成した述語のリストを渡したいが、私はこのようなものが必要だと思います
Function<List<Predicate<FeatureFlag>>, Boolean> iteratePredicates = (predicates) -> {
//test each predicate and return true if all of them are true otherwise return false
}
デッドプール :
あなたが受け取るメソッドを作成することができSet<Predicate<FeatureFlag>>
、その値を、あなたは述語の集合をストリーミングして使用することができますallMatchを
public boolean testPredicates(Set<Predicate<FeatureFlag>> predicates, Integer value) {
return predicates.stream().allMatch(pre->pre.test(value));
}