在自定义对象列表的条件中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