ser*_*ena 10 java rule-engine drools
我刚刚开始使用Drools(版本5.1.0),所以请耐心等待这个问题已经得到解答.
我有一个java.util.List对象,其中包含复杂类型A的对象,其中A为:
class A {
String name;
String Value;}
Run Code Online (Sandbox Code Playgroud)
列表及其元素位于Drools引擎的工作内存中.只有当列表中元素的名称和值与特定值匹配时,是否有一种简单的方法可以触发规则?
目前,我在Drools规则中使用了一个自定义函数,它遍历列表并返回true,如果有一个符合规范的元素,但我不知道这是否是最有效和最简单的用法.
Eds*_*lli 16
如果你说的A实例在工作内存中(理想情况),只需使用它编写规则:
rule X
when
A( name == "bob", value == 10 )
...
Run Code Online (Sandbox Code Playgroud)
不建议直接将集合(列表,树等)插入到工作内存中,因为它们是抽象的数据结构,没有附加任何内在语义.但是,假设您有一个Person类,其中包含地址列表,并且您希望在加拿大蒙特利尔执行每个地址的规则,而不将地址本身作为fac插入.你可以写:
rule X
when
Person( $addresses : addresses )
Address( city == "Montreal", country == "CA" ) from $addresses
...
Run Code Online (Sandbox Code Playgroud)
最后,如果您真的想将列表本身用作事实(再次,不好的做法),您可以执行以下操作,但请注意它将匹配工作内存中的所有列表:
rule X
when
$list : List()
A( name == "bob", value == 10 ) from $list
...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
16995 次 |
最近记录: |