Drools遍历对象树
Drools traversal object tree
如何使用 Drools 遍历对象树(与树的深度无关)?
我的 POJO:
public class Node {
int ID;
String name;
String value;
List<Node> nodes;
}
当节点的值低于节点列表的值之和时,我需要记录情况。每个节点都可以有自己的节点列表:
Node1
- Node1_1
- Node1_2
-Node1_2_1
-Node1_2_2
.....
条件:
Node1.value < Node1_1.value + Node1_2.value
and
Node1_2 < Node1_2_1.value + Node1_2_2.value
根据这个规则写一个规则来监控所有的节点不是一个好主意。我对使用规则有两个反对意见。
首先,该规则会触发WM中的所有Node对象,并导致递归计算子节点的总和。这意味着每个级别的每个节点都会导致此计算 - 不寒而栗!
其次,一旦你为一个节点建立了差异,有什么要求?下一个更高级别的总和是多少:从存储值计算的总和还是使用计算值的总和?
明确第二点后:写一个Java方法遍历树,这样它就可以计算值并标记或更正不匹配的节点。
如何使用 Drools 遍历对象树(与树的深度无关)?
我的 POJO:
public class Node {
int ID;
String name;
String value;
List<Node> nodes;
}
当节点的值低于节点列表的值之和时,我需要记录情况。每个节点都可以有自己的节点列表:
Node1
- Node1_1
- Node1_2
-Node1_2_1
-Node1_2_2
.....
条件:
Node1.value < Node1_1.value + Node1_2.value
and
Node1_2 < Node1_2_1.value + Node1_2_2.value
根据这个规则写一个规则来监控所有的节点不是一个好主意。我对使用规则有两个反对意见。
首先,该规则会触发WM中的所有Node对象,并导致递归计算子节点的总和。这意味着每个级别的每个节点都会导致此计算 - 不寒而栗!
其次,一旦你为一个节点建立了差异,有什么要求?下一个更高级别的总和是多少:从存储值计算的总和还是使用计算值的总和?
明确第二点后:写一个Java方法遍历树,这样它就可以计算值并标记或更正不匹配的节点。