本文将分享几种Drools7中对List类型数据的遍历方法。
1.场景一:遍历工作内存中的一个List集合,且工作内存中只有一个List时。
entity:
public class Animal {
private Integer id;
private String name;
public Animal(Integer id, String name) {
this.id = id;
this.name = name;
}
}
rule:
//规则处理:打印出所有List集合中的元素
rule "hello_0"
when
//依次获取工作内存中的所有List集合
$li:List(size > 0)
//$m:Animal(name == "cat") from $li //获取List中name = "cat" 的Animal对象
//依次获取当前List中的元素
$m:Animal() from $li
then
//依次打印当前List中的message
//注意,这里会被多次执行,执行次数为所有List集合元素总数(注意不是当前List集合总数)
//因为规则从工作内存中筛选出一条完全符合conditions的数据,都会在agenda中插入一个规则与匹配数据的组合,再由agenda负责执行规则。
System.out.println("id:"+$m.getId()+",name:"+$m.getName());
end
创建并插入数据源
KieServices kieServices = KieServices.Factory.get();
KieContainer kieContainer = kieServices.newKieClasspathContainer();
kieSession = kieContainer.newKieSession();
//实例化一个List,并插入到工作内存中
List<Animal> list = new ArrayList<Animal>(){
{
this.add(new Animal(100,"cat"));
add(new Animal(200,"mouse"));
add(new Animal(300,"dog"));
}};
kieSession.insert(list);
kieSession.fireAllRules();
执行结果:
id:300,name:dog
id:200,name:mouse
id:100,name:cat