在java中将多个相同类的java对象插入到drools中

时间:2015-12-15 20:57:24

标签: java drools

我正在尝试流口水。

我遇到过这种情况,我想在Drools中插入两个相同类的不同java对象,并使用每个规则中的两个对象。

对于Ex:

假设我有两个相同类的java对象,几乎有相同的变量。

类看起来像这样。

public class Sample{
   Map<String,String> map;
   sample(Map<String,String>map){
      this.map = map;
   }
}

物件:

Map<String,String>map1 = new Map<>();
map1.put("name","james");

Map<String,String>map2 = new Map<>();
map2.put("name","james");
map2.put("id","123k");

Sample obj1 = new Sample(map1);
Sample obj2 = new Sample(map2);

2个对象obj1,obj2的区别仅在于地图中的键数。

如果我在运行规则之前将这两个对象插入knowledgeSession,我如何在同一规则中同时使用这两个对象?如何区分同一规则中的对象,以便我有机会使用这两个对象在规则的when子句中。

插入会话看起来像这样:

private static StatefulSession sessionObject;
sessionObject.insert(obj1);
sessionObject.insert(obj2);
sessionObject.fireAllRules(1);

如何区分规则中的对象,以便从以下示例代码中$obj1 receives object1$obj2 receives object2

import com.sample.client.Sample;

rule "1"
    when
        $obj1 : Sample()
        $Obj2 : Sample()
        ........
    then
        ........
        ........
end

处理基本数据类型很容易。但是如何处理上述情况,在java对象中提取map的信息以区分对象至关重要?

1 个答案:

答案 0 :(得分:2)

如果您不关心哪个对象绑定到哪个变量,那么您可以这样做:

rule "1"
when
    $obj1 : Sample()
    $obj2 : Sample(this != $obj1)
then

end

如果您确实需要$obj1分配到obj1$obj2obj2,那么您需要一些内容来唯一标识您的对象。可能会在id类中添加Sample属性,或者使用地图中的特定键来指定ID。例如:

rule "1"
when
    $obj1 : Sample(map["id"] == "123k")
    $obj2 : Sample(map["id"] == "456k")
then

end

修改

请务必注意,即使是2 Sample个事实,第一条规则仍会多次匹配。

希望它有所帮助,