zl程序教程

您现在的位置是:首页 >  其他

当前栏目

《Drools7.0.0.Final规则引擎教程》番外实例篇——Map使用案例详解编程语言

2023-06-13 09:20:44 时间

不少朋友在问,如何在Drools规则文件中使用Map。今天就用实例带大家了解一下map的使用方法。

测试部分代码:

@Test public void testMapUsage() { 

 KieSession kieSession = this.getKieSession( map-group  

 Map String, Person  map = new HashMap (); 

 Person p1 = new Person(); 

 p1.setAge(10); map.put( p1 ,p1); 

 

 Person p2 = new Person(); 

 p2.setAge(20); map.put( p2 ,p2); 

 

 kieSession.insert(map); 

 

 int count = kieSession.fireAllRules(); 

 System.out.println( Fire   + count +   rule(s)!  

 

 }

首先,我们创建了一个map,map中存放了两个Person对象,随后将map insert到了session中。其中这两个Person的年纪是不同的。
下面看一下规则代码:

package com.rules 

import java.util.Map; import com.secbro.drools.model.Person; 

 rule  map-usage  

 

 agenda-group  map-group  

 

 when 

 $obj : Object(); 

 $map : Map([ p1 ] != $obj); 

 then 

 System.out.println( p1 s age is   + ((Person)$map.get( p1 )).getAge()); 

 System.out.println( p2 s age is   + ((Person)$map.get( p2 )).getAge()); 

 end

规则中首先定义了一个Object对象,此对象肯定是存在的。另外就是给map定义一个变量,获取了map中key为p1的对象,并比较p1这个对象与$obj对象是否相当,不相等的话满足条件。在上面的过程中实现了一种从map获取对象的方法。

然后再看一下RHS部分,直接使用get方法从map中获取值,并强转为原始的对象,调用对象的对应方法。

执行结果如下:

p1 s age is 10 p2 s age is 20 Fire 1 rule(s)!

以上完整代码请于github上下载:https://github.com/secbr/drools 。

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/15185.html

cjavaxml