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

简介: 《Drools7.0.0.Final规则引擎教程》番外实例篇——Map使用案例

背景

技术交流群中,不少朋友在问,如何在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


目录
相关文章
源码分析系列教程(12) - 手写Map框架(基于JDK1.7)
源码分析系列教程(12) - 手写Map框架(基于JDK1.7)
39 0
|
索引
源码分析系列教程(11) - 手写Map框架(基于LinkedList)
源码分析系列教程(11) - 手写Map框架(基于LinkedList)
35 0
SpringMVC入门到实战------5、域对象共享数据 Request、Session、Application、Model、ModelAndView、Map、ModelMap的详细使用及代码实例
这篇文章详细解释了在IntelliJ IDEA中如何使用Mute Breakpoints功能来快速跳过程序中的后续断点,并展示了如何一键清空所有设置的断点。
SpringMVC入门到实战------5、域对象共享数据 Request、Session、Application、Model、ModelAndView、Map、ModelMap的详细使用及代码实例
|
5月前
|
JavaScript 定位技术
vue 百度地图开发【教程】1. 绘制百度地图(不使用 vue-baidu-map,解决 BMap is undefined)
vue 百度地图开发【教程】1. 绘制百度地图(不使用 vue-baidu-map,解决 BMap is undefined)
442 0
|
7月前
|
存储 算法 C++
【C++ 包装器类 map】C++ 标准库(std)中的map结构 哈希表(unordered_map)和黑红树(map)教程
【C++ 包装器类 map】C++ 标准库(std)中的map结构 哈希表(unordered_map)和黑红树(map)教程
529 1
|
7月前
|
Java
Java【代码分享 11】yaml配置List和Map参数对象的配置信息及类文件实例分享(效仿GatewayDynamic+DynamicDataSource的注入方法)
Java【代码分享 11】yaml配置List和Map参数对象的配置信息及类文件实例分享(效仿GatewayDynamic+DynamicDataSource的注入方法)
284 0
三大集合--Map集合 -- 详细完整加案例分析
三大集合--Map集合 -- 详细完整加案例分析
|
数据处理 开发者 Python
Google Earth Engine Map教程书中英双语
Google Earth Engine Map教程书中英双语
420 0
|
Java
Java对象,Map,List,Set数组等相互转换大全(详细讲解,附代码,讲解案例)(二)
Java对象,Map,List,Set数组等相互转换大全(详细讲解,附代码,讲解案例)(二)
163 0
Java对象,Map,List,Set数组等相互转换大全(详细讲解,附代码,讲解案例)(二)
|
JSON Java 数据格式
Java对象,Map,List,Set数组等相互转换大全(详细讲解,附代码,讲解案例)(一)
Java对象,Map,List,Set数组等相互转换大全(详细讲解,附代码,讲解案例)(一)
217 0
Java对象,Map,List,Set数组等相互转换大全(详细讲解,附代码,讲解案例)(一)