《Drools7.0.0.Final规则引擎教程》番外实例篇——相同对象and List使用

简介: 《Drools7.0.0.Final规则引擎教程》番外实例篇——相同对象and List使用

前奏

群组(QQ:593177274)交流中有朋友提出一个问题,怎么实现两个相同对象的插入和比较?相信很多朋友也遇到类似的问题,于是抽时间为大家写一段实例代码,后续代码会同步到GitHub中。下面简单介绍一下实现实例:


场景

向session中insert两个相同的对象,但对象的参数值有不同的地方,同时要求对两个FACT对象的属性进行判断,当同时满足(&&)时,通过规则校验,进行后续业务处理。下面,通过两种方式来实现此功能。


代码实现

方式一

规则文件内容:


package com.rules
import com.secbro.drools.model.Customer;
rule "two same objects"
    agenda-group "two same objects"
    when
        $firstCustomer:Customer(age == 59);
        $secondCustomer:Customer(this != $firstCustomer,age == 61);
    then
        System.out.println("firstCustomer age :" + $firstCustomer.getAge());
        System.out.println("secondCustomer age :" + $secondCustomer.getAge());
    end

测试端调用部分代码:

@Test
    public void testSameObjects() {
        KieSession kieSession = getKieSession("two same objects");
        Customer customer = new Customer();
        customer.setAge(61);
        kieSession.insert(customer);
        Customer customer1 = new Customer();
        customer1.setAge(59);
        kieSession.insert(customer1);
        int count = kieSession.fireAllRules();
        kieSession.dispose();
        System.out.println("Fire " + count + " rules!");
    }

如此,则实现了上面场景的内容。值得注意的是规则文件中this != $firstCustomer的写法,此处可以排除两个对象属性相同导致的问题。

方法二

此方式采用List来传递两个相同的参数,规则文件内容如下:

package com.rules
import com.secbro.drools.model.Customer;
import java.util.List;
rule "two same objects in list"
    agenda-group "two same objects in list"
    when
        $list : List();
        $firstCustomer:Customer(age == 59) from $list;
        $secondCustomer:Customer(this != $firstCustomer,age == 61) from $list;
    then
        System.out.println("two same objects in list:firstCustomer age :" + $firstCustomer.getAge());
        System.out.println("two same objects in list:secondCustomer age :" + $secondCustomer.getAge());
    end

测试类部分代码:

@Test
    public void testSameObjectsInList() {
        KieSession kieSession = getKieSession("two same objects in list");
        List<Customer> list = new ArrayList<>();
        Customer customer = new Customer();
        customer.setAge(61);
        list.add(customer);
        Customer customer1 = new Customer();
        customer1.setAge(59);
        list.add(customer1);
        kieSession.insert(list);
        int count = kieSession.fireAllRules();
        kieSession.dispose();
        System.out.println("Fire " + count + " rules!");
    }
目录
相关文章
|
2月前
|
JSON 前端开发 JavaScript
json字符串如何转为list对象?
json字符串如何转为list对象?
397 7
|
4月前
|
TensorFlow 算法框架/工具 Python
从numpy,list对象创建
【8月更文挑战第12天】从numpy,list对象创建。
29 8
|
4月前
|
SQL 关系型数据库 MySQL
INSERT INTO t_a.tableName SELECT * FROM t_b.tableName 如何通过定义一个list对象,包含多个tableName,循环执行前面的sql,用MySQL的语法写
【8月更文挑战第7天】INSERT INTO t_a.tableName SELECT * FROM t_b.tableName 如何通过定义一个list对象,包含多个tableName,循环执行前面的sql,用MySQL的语法写
54 5
|
6月前
|
存储 索引 Python
Python教程:深入了解 Python 中 Dict、List、Tuple、Set 的高级用法
Python 中的 Dict(字典)、List(列表)、Tuple(元组)和 Set(集合)是常用的数据结构,它们各自有着不同的特性和用途。在本文中,我们将深入了解这些数据结构的高级用法,并提供详细的说明和代码示例。
316 2
|
6月前
|
Java
Java list中的对象转为list,list中的对象转为map
Java list中的对象转为list,list中的对象转为map
145 1
|
7月前
|
前端开发
css教程-li的list-style-type属性
通过设置 `list-style-type`属性,你可以根据需求为列表项设置不同的标志样式,从而改变列表的外观。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
79 4
|
7月前
|
存储 数据处理 索引
Python基础教程——列表(List)
Python基础教程——列表(List)
|
7月前
|
Python
两个list集合合并成一个python教程 - 蓝易云
在这两种方法中,加号会创建一个新的列表,而extend方法则会在原地修改列表。
47 0
|
7月前
|
Python
python教程:二维列表(list)初始化
python教程:二维列表(list)初始化
84 0
|
7月前
|
Java
list集合 使用java8同一列表获取前一条的数据放到当前对象中
list集合 使用java8同一列表获取前一条的数据放到当前对象中