java - Drools 将一个对象的列表转换为 Drools 中的另一个对象的列表
问题描述
我有一个类说 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
}
解决方案
好吧,当然这是可能的,而且不是特别困难。
我将假设您将“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”中,并将结果插入到工作内存中。
然后第二条规则将触发,因为在第一条规则触发对后续规则的重新评估B
之后,工作记忆中存在一个存在。insert
请注意,此转换规则仅在工作记忆中仅存在 1 个“A”时才有效。如果您有 2 个“A”实例,第一个将触发规则并转换并插入“B”。此时,转换规则将不再有效,因此它永远不会转换第二个“A”实例。
如果您确实有多个 A 实例,则有很多方法可以解决此问题。例如,您可以在转换后收回每个 A。但是上面的例子通常是你会怎么做的。
推荐阅读
- ruby-on-rails - MongoId 没有更新模型数据,也没有显示任何错误
- laravel - 使用 laravel 模型创建方法 Model::create 时我可以获取插入 ID
- authentication - 了解和使用 Microsoft 标识
- c++ - 带有 SSE 内在函数的 Clang 内存清理程序错误
- sql - Microsoft Excel 和 ODBC 数据源之间可以使用 SQL 内连接吗?
- angular - Angular - 在 Angular 中创建路由时出错
- asp.net - 如何使用表中的数据在我的视图中创建下拉列表?
- reactjs - 如何将道具从 Formik 传递到渲染的表单?
- django - Django模板不呈现任务信息
- node.js - 等待函数的最佳方式是什么?