述語のリストを反復処理する方法

混雑する :

私は春のブートアプリケーションを持っているし、我々はそれに機能フラグのセットで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));

 }

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=6411&siteId=1