gpt4 book ai didi

java - 将同一类的多个java对象插入到java中的drools中

转载 作者:行者123 更新时间:2023-11-30 08:43:23 25 4
gpt4 key购买 nike

我正在试验流口水。

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

例如:

假设我有两个具有几乎相同变量的同一类的 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 子句中。

插入 session 看起来像这样:

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

如何根据以下示例代码区分规则中的对象,以便 $obj1 接收 object1$obj2 接收 object2

import com.sample.client.Sample;

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

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

最佳答案

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

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 事实,第一条规则仍然会匹配多次。

希望对你有帮助

关于java - 将同一类的多个java对象插入到java中的drools中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34299239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com