我正在尝试流口水。
我遇到过这种情况,我想在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的信息以区分对象至关重要?
答案 0 :(得分:2)
如果您不关心哪个对象绑定到哪个变量,那么您可以这样做:
rule "1"
when
$obj1 : Sample()
$obj2 : Sample(this != $obj1)
then
end
如果您确实需要$obj1
分配到obj1
和$obj2
到obj2
,那么您需要一些内容来唯一标识您的对象。可能会在id
类中添加Sample
属性,或者使用地图中的特定键来指定ID。例如:
rule "1"
when
$obj1 : Sample(map["id"] == "123k")
$obj2 : Sample(map["id"] == "456k")
then
end
修改强>
请务必注意,即使是2 Sample
个事实,第一条规则仍会多次匹配。
希望它有所帮助,