Drools - 如何从ArrayList中获取String []收集

时间:2016-11-22 05:53:04

标签: drools

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 */
}

1 个答案:

答案 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作为事实插入,而不是从包含的事实对象中提取它们,那就更简单了。