rule "Your First Rule"
no-loop
salience 10
when
$c : Company()
// $e : String()
$e : StaffException()
$r : StaffExcCode( $r.getCode() == "1" ) from $e.getStaffException()
$y : ArrayList()
from collect ( String() from $r.getStaffExc())
$ee : Staff( StaffCode not memberOf( $y )) from $c.getStaffInfo()
then
//actions
System.out.println("Satisfied." + $y);
//System.out.println("Satisfied." + $ee);
端
我得到了一个arrayList $ y并希望生成一个String []数组,用作memberOf中的条件。如何实现这种转变?
这是演示中使用的类: 类StaffExcCode:
public class StaffExcCode {
private String StaffExc;
private String code;
public StaffExcCode(String StaffExc, String code) {
this.StaffExc = StaffExc;
this.code = code;
}
/* ignore the get and set */
}
类StaffException:
public class StaffException {
private List<StaffExcCode> exc;
/* ignore the get and set */
}
班级员工:
public class Staff {
private String StaffCode;
private String StaffName;
private int StaffAge;
/* ignore the get and set */
}
班级公司:
public class Company {
private int CompanyCode;
private String CompanyName;
private int StaffNumber;
private List<Staff> StaffInfo;
/* ignore the get and set */
}
答案 0 :(得分:0)
我不确定我是否做得对,因为你没有发布声明规则应该做什么或者(甚至更好)具有预期结果的数据集。 (如果您坚持使用通常的JavaBeans约定,exc
中的StaffException
与$e.getStaffException()
不匹配。)
我认为您不必将数据收集到列表中;有not
CE可以应用于模式
rule "Your First Rule"
when
$c : Company( $si: staffInfo )
$staff: Staff( $staffCode: staffCode, $sn: staffName ) from $si
StaffException( $exc: exc )
not StaffExcCode( staffExc == $staffCode, code == "1" ) from $exc
then
System.out.println("Satisfied: " + $sn);
end
如果您将Staff和StaffExcCode作为事实插入,而不是从包含的事实对象中提取它们,那就更简单了。