java - 如何迭代谓词列表

标签 java lambda java-8 functional-programming predicate

我有一个 Spring Boot 应用程序,并且我们有一个带有一组功能标志的 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();
}

我想传递实际的谓词并迭代它们中的每一个,但我想知道我是否可以执行一个通用函数,我传递谓词列表及其要测试的值,以及如果它们全部为真,则该函数返回 true 否则 false

然后在这个类中添加一些这样的代码,因为我想按需生成这个列表,例如我有一个客户x购买featureOne和featureTwo,在这个例子中我创建一个这样的列表

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));

 }

关于java - 如何迭代谓词列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60121926/

相关文章:

java - 如何在 Ubuntu 11.10 上编译 OpenJDK 7 调试版本

java - 如何在递归函数的每一级都有一个新的局部数组

C++、Lambdas、for_each 和内存损坏

Java lambda 比匿名类慢 20 倍

java - 在将字符串转换为日期期间定义您的月份

java - 当类实现相同的接口(interface)时,Lambda 表达式会失败并出现 LambdaConversionException?

java - Android 中的环形网络

java - 如何在 Commons HttpClient 3.x 中获取当前传输速率

c++ - C++11 lambda 可以捕获文件范围变量吗?

Java 8 过滤器谓词参数索引越界