繁体   English   中英

如何在Drools规则中声明列表

[英]How to declare a List in Drools rule

我有一个简单的对象构造。 ContextDroolsObject具有Map类型的属性,称为objects 在该映射内,有一个带有ArrayList的键"imageThemes" ,这里的规则永远不匹配:

import java.util.ArrayList;
import java.util.Map;
import com.my.ContextDroolsObject;

dialect 'java'


rule 'Soccer Image Theme'
    salience 100
    when
        s : ContextDroolsObject()
        objectsm : Map() from s.objects
         imageThemesList : ArrayList() from outputsm.imageThemes
    then
System.out.println("-----------------------soccer");
    end

我也尝试过用List()获得相同的结果。

¿如何匹配列表声明?

嗨,您可以通过以下方式重写规则:

import java.util.ArrayList;
import java.util.Map;
import com.my.ContextDroolsObject;

dialect 'java'


rule 'Soccer Image Theme'
salience 100
when
    s : ContextDroolsObject( imageThemesList : objects#Map.get("imageThemes") )
then
    System.out.println("-----------------------soccer");
end

对事实对象使用分层结构通常是设计缺陷。 您可能无法方便地对列表元素进行推理。

无论如何,这是从ContextDroolsObject提取地图中列表的方法。

rule 'Soccer Image Theme'
  salience 100
when
  s: ContextDroolsObject() 
  imageThemesList: ArrayList() from s.getObjects().get( "imageThemes" )
then
  System.out.println("-----------------------soccer");
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM