《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

后语

此系列课程持续更新中,QQ群:593177274,欢迎大家加入讨论。目前国内第一套关于Drools(7)的入门教程《Drools 7 规则引擎入门教程》正在火热录制中,其他更多关于Drools的系列教程也在筹划中,希望大家多多支持。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大内老A

[原创]深入理解C# 3.x的新特性(3):从Delegate、Anonymous Method到Lambda Expression

在C#3.0中,引入了一些列新的特性,比如: Implicitly typed local variable, Extension method,Lambda ...

2178
来自专栏程序员与猫

读书记录

日常读书中的一些小小记录,偏重深入理论 遇到泛型类型时,编译器会在编译未绑定的泛型类型时就解析好所有方法重载,而不是等到执行时,才去为每个可能的方法调用重新考虑...

1956
来自专栏码农阿宇

C# 6.0中你不知道的新特性

为什么写? 今天去上班的公交上,有朋友在张队(张善友)的微信群里,发了一个介绍C# 6.0新特性的视频,视频7分钟,加上本人英语实在太low,整体看下来是一脸懵...

2534
来自专栏jessetalks

背后的故事之 - 快乐的Lambda表达式(一)

  自从Lambda随.NET Framework3.5出现在.NET开发者眼前以来,它已经给我们带来了太多的欣喜。它优雅,对开发者更友好,能提高开发效率,天啊...

2947
来自专栏带你撸出一手好代码

使用“空”对象替代引用是否为空判断

使用Null对象替代引用是否为空判断 编程语言中最常见运行时异常非NullPointerException莫属,只要程序依赖于外部的输入数据,比如说http请求...

3638
来自专栏大内老A

通过内存分析工具来证明字符串驻留机制

在这之前我写过一些文章来介绍关于字符串内存分配和驻留的文章,涉及到的观点主要有:字符串的驻留机制避免了对具有相同字符序列的字符串对象的重复创建;被驻留的字符串是...

19610
来自专栏编程坑太多

lambda与函数式

1542
来自专栏Golang语言社区

go语言:函数参数传递详解

参数传递是指在程序的传递过程中,实际参数就会将参数值传递给相应的形式参数,然后在函数中实现对数据处理和返回的过程。比较常见的参数传递有:值传递,按地址传递参数或...

1371
来自专栏大内老A

深入理解C# 3.x的新特性(2):Extension Method[上篇]

在C#3.0中,引入了一些列新的特性,比如: Implicitly typed local variable, Extension method,Lambda ...

1906
来自专栏个人随笔

深入类的方法

一.C#关键字扩充解释:   1. new :     1)开辟空间     2)调用构造     3)实例化对象   2. this:     当前类的实例,...

2807

扫码关注云+社区