如何在drools中使用带有两个参数的函数

时间:2018-01-03 19:46:37

标签: drools drools-guvnor drools-planner drools-fusion drools-flow

我想检查学生ID 是否出现在公司类的 emp id 中。 如果empidlist中存在studentid,那么我应该抛出错误。

我尝试过两种不同的方式:

第一

rule :"check the student id is present in empid"
when
$company : Company()
accumulate(Employee(empid !=null, empid : empid) from $company.emplist;
empidlist: collectList(empid))
accumulate(Student(stdid !=null, empidlist.contains(stdid),stdid : stdid) from $company.stdlist; stdidlist: collectList(stdid);stdidlist.size()>0)
then
   //throw error.

运行时,我收到以下错误:无法使用累积的.contains()。

第二

function boolean isStudentidExists(List<String> stdidlist, List<String> empidlist){
    for (String s : stdidlist) {
            for (String res : empidlist) {
                if (res.equals(s))
                    return true;
            }
        }
        return false;
}

rule :"check the student id is present in empid"
when
$company : Company()
accumulate(Employee(empid !=null, empid : empid) from $company.emplist; empidlist: collectList(empid))
accumulate(Student(stdid !=null,stdid : stdid) from $company.stdlist; stdidlist: collectList(stdid))
eval(isStudentidExists(stdidlist,empidlist))
then
   //throw error.

这里没有阅读列表。我试过将类型仅作为List&lt;&gt;在我的功能中,但仍然无效。

Class Company {
private List<Employee> emplist;
private List<Student> stdlist;
}

Class Employee {
private String empid;
}

Class Student  {
private String stdid;
}

1 个答案:

答案 0 :(得分:0)

至于功能,请使用

function boolean isStudentidExists(List stds, List emps ){
  for( Object s : stds) {
    if( emps.contains( s ) ) return true;
  }
  return false;
}

要使用逻辑,建议将Student和Employee对象作为事实插入。

rule check
when
    Company( $el: emplist, $sl: stdlist )
    Student( $sid: stdid, this memberOf $sl )
    Employee( empid == $sid, this memberOf $el )
then
    // error
end