Drools将一个对象的列表转换为drools中的另一个对象的列表
Posted
技术标签:
【中文标题】Drools将一个对象的列表转换为drools中的另一个对象的列表【英文标题】:Drools Converting list of one object to list of another object in drools 【发布时间】:2021-12-11 14:48:18 【问题描述】:我有一个类说 A 和 Waiver 对象列表,我想迭代这个列表,将其转换为 WaiverInfo 对象列表并插入到 B 类类型的对象。是否有可能在流口水中实现这一点?
class A
List<Waiver> waivers;
class B
List<WaiverInfo> waiverList;
class Waiver
String code;
String name;
class WaiverInfo
String code;
String name
【问题讨论】:
【参考方案1】:嗯,这是可能的,而且不是特别困难。
我将假设您将“A”插入到规则中,并希望针对“B”编写规则。我还将假设您根本不会在规则中插入任何“B”。
rule "Convert A to B"
when
not( B() )
$a: A()
then
B b = new B();
// do the conversion here in regular java
insert(b);
end
rule "Example - do something with B"
when
B( $waiverList: waiverList )
then
// ...
end
基本上,转换规则检查工作内存中不存在B
,但存在A
。如果满足这些条件,则转换发生在“then”中,并将结果插入到工作内存中。
随后将触发第二条规则,因为在第一条规则中的insert
触发对后续规则的重新评估之后,工作内存中存在B
。
请注意,此转换规则仅在工作内存中仅存在 1 个“A”时才有效。如果您有 2 个“A”实例,第一个将触发规则并转换并插入“B”。此时,转换规则将不再有效,因此它永远不会转换第二个“A”实例。
如果您确实有多个 A 实例,则有很多方法可以解决这个问题。例如,您可以在转换后收回每个 A。但是上面的例子通常是你会怎么做的。
【讨论】:
以上是关于Drools将一个对象的列表转换为drools中的另一个对象的列表的主要内容,如果未能解决你的问题,请参考以下文章