java - drools - 具有多个条件的数组列表访问

标签 java drools

我有一个对象 A,其中包含对象 B 的列表。

Class A{
    List<B> bList;
}

Class B{
    String code;//Values QT1,QT2.....QT5
    Boolean answer;
}

B 就像一个问卷对象。 A 保留所有问卷,总会有 5 个问题(将来可能会添加)QT1 到 QT5,答案为 true、false 或 null。 当任何 QTx 答案为 null 或 QT1、QT2 为 true 时,我需要触发逻辑。我已经实现如下,但它不起作用。这有什么问题吗?

rule "validateQuestions"
ruleflow-group "validate"
dialect "mvel"
when
    $a : A(bList.empty == false)
    B(code == "QT1",answer == true) from $a.bList
    B(code == "QT2",answer == true) from $a.bList
    B(code == "QT3",answer == null) from $a.bList
    B(code == "QT4",answer == null) from $a.bList
    B(code == "QT5",answer == null) from $a.bList
then
    //("Logic Here")

总会有 5 个 QTx,这可以是 true false 或 null 答案的任意组合。

最佳答案

rule "validateQuestions"
when
    $a: A()
    B( code in ("QT1", "QT2") && answer == true ||
       code in ("QT3", "QT4", "QT5") && answer == null ) from $a.bList
then

您不需要测试 List.empty。

请务必阅读有关规则的 when 部分中“模式”语义的文档 - 我不会在这里重复所有内容(与事实绑定(bind)、隐含连词……)。另外,请检查有关约束运算符(&&、||、in、not in、...)的文档。

关于java - drools - 具有多个条件的数组列表访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35145415/

相关文章:

java - MapReduce程序导致错误

java - 如何指定 war 文件中资源的路径?

java - 用于 Drools 的 Eclipse Java 自动完成

java - 使用 Drools Expert 开发专家系统的想法

java - 如何将 Drool 规则显示到 Eclipse View 中

junit - 在 Drools 单元测试中在哪里创建知识库?

java - 按顺序使用 REST API,多线程环境中每次调用之间至少间隔 100 毫秒。 (带 RestTemplate)

java - 按值对 HashMap 或 TreeMap 进行排序

java - 使用java向同一路由器下的多个主机发送数据包

基于 Java 的语法检查/基于规则的工具集