【问题标题】:drools rules in condition in List of custom objects自定义对象列表中条件中的流口水规则
【发布时间】:2018-09-04 23:22:40
【问题描述】:

我有学生班级,其中有相关部门的列表。

public class Student {

    private String name;
    private String desc;
    private List<Department> department = new ArrayList<Department>();
}

public class Department {

    private String name;
    private String desc;
}

我正在尝试在 Drools 中编写规则。规则就像 - 如果学生属于某些部门然后采取行动。我无法找出正确的方法来做到这一点。我在下面写的一个不起作用。我知道如果它的字符串列表有效。有没有办法对自定义对象进行包含。

rule "Language"

when
    $student : Student(department contains "English" && department contains "French")

then
    System.out.println("Belongs to Language");

结束

调用规则的代码

                Student student  = new Student();
                student.setName("John");
                Department a1 = new Department();
                a1.setName("English");
                student.addDepartment(a1);
                Department a2 = new Department();
                a2.setName("French");
                student.addDepartment(a2);
                System.out.println("Student :" + student);
                ksession.insert(student);  
                ksession.fireAllRules();  

我使用的是 Drools 6.2 版本。

【问题讨论】:

    标签: drools


    【解决方案1】:

    List&lt;Department&gt; 中查找字符串是行不通的。您必须寻找name 字段是这两个值之一的成员。

    rule "Language"
    when
      $student: Student( $dep: department )
      Department( name == "French" || == "English",
                  this memberOf $dep )
    then
      System.out.println("Belongs to Language");
    end
    

    编辑:您还需要将 DEpartment 对象作为事实插入。

    如果学生必须同时掌握两种语言,请使用

    rule "Language"
    when
      $student: Student( $dep: department )
      Department( name == "French", this memberOf $dep )
      Department( name == "English", this memberOf $dep )
    then
      System.out.println("Belongs to Language");
    end
    

    【讨论】:

    • 谢谢劳恩。我尝试执行此规则,但它不会在操作部分打印 sysout。不确定是什么问题。另外我的条件是学生应该属于英语和法语系。然后他属于语言部门。如果他属于英语和数学,则不应解雇此规则。更新了相关代码。
    • 好吧,您添加的代码表明您没有将 Department 对象作为事实插入。编辑了答案。
    猜你喜欢
    • 2011-12-06
    • 2017-08-11
    • 1970-01-01
    • 2016-06-15
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    相关资源
    最近更新 更多