Drools:如何迭代列表并添加到另一个列表

时间:2013-12-12 07:29:31

标签: java jboss drools

我正在尝试迭代一个ArrayList并使用规则内的jboss drools添加到另一个ArrayList。

我有一个列表的pojo。

Class DroolsPojo{
   List<String> answers;

   //getters and setters
}

我的pojo返回一个列表,如{“a”,“b”,“c”,“”,“”,“”}。我想迭代列表,并希望添加不等于“”的元素(不是列表中的空元素)。

如何使用drools进行此操作?

有没有办法让dluols得到不等于“”的元素数。

我的规则如下。

rule "rule1"
when 
   dpojo:DroolsPojo(answers!=null)
then
    List list = dpojo.getAnswers();
    //want to iterate the list here
end

如何用drools做到这一点?

2 个答案:

答案 0 :(得分:3)

所以当答案实例变量不为空时,规则必须触发? 使用方言mvel,这样的事情应该有效:

package drools.xxx
dialect "mvel"

import drools.xxx.DroolsPojo

rule "rule1"
when 
    $dpojo : DroolsPojo(answers!=null)
    $answersWithoutEmptyStrings : List() from collect ( String(length > 0) from $dpojo.answers )
then
    insert($answersWithoutEmptyStrings)
end

这里我在when子句中执行collect(iterating)。

答案 1 :(得分:1)

在右侧,您只需编写普通的旧Java代码:

List list = dpojo.getAnswers();
for( Object obj: list ){
    String s = (String)obj;
    if( s.length() > 0 ){ ... }
}

解析器不喜欢泛型(但是?)所以你必须解决这个问题。