在自定义对象列表的条件中drools规则

在自定义对象列表的条件中drools规则,drools,Drools,我有一个学生班,这个班有相关的部门列表 public class Student { private String name; private String desc; private List<Department> department = new ArrayList<Department>(); } public class Department { private String name; private String

我有一个学生班,这个班有相关的部门列表

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;
}
结束

调用规则的代码

                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版本。

列表中查找字符串是行不通的。您必须查找
name
字段是这两个值之一的成员

rule "Language"
when
  $student: Student( $dep: department )
  Department( name == "French" || == "English",
              this memberOf $dep )
then
  System.out.println("Belongs to Language");
end
编辑:您还需要插入部门对象以及事实

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

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 in action部分。不知道是什么问题。我的条件是学生应该同时属于英语和法语系,然后他属于语言系。如果他属于英语和数学,这条规则就不应该被取消。更新了相关代码。您添加的代码表明您没有将部门对象作为事实插入。编辑了答案。
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