规则引擎集合相关处理

在实际生产过程中,有很多关于集合的处理场景,比如一个Fact对象中包含有一个集合,而需要判断该集合是否包含某个值。而Drools规则引擎也提供了多种处理方式,比如通过from、contains、exists等进行操作,比较。

当然也可以通过function函数来做相应的比较,在个在其他章节讲到过,就不在此赘述。下面重点以几个实例才进行讲解,在具体实践中根据具体情况来进行运用。

实例

省略掉基本的配置,直接看调用代码和规则代码。

测试调用代码:

public class ContainsDemo extends BaseDemo {

	public static void main(String[] args) {

		KieSession kieSession = getKieSession("containsVar");

		Corporation corporation = new Corporation();
Set<Scope> scopes = new HashSet<>();
scopes.add(new Scope("P2P"));
scopes.add(new Scope("金融"));
scopes.add(new Scope("区块链"));
corporation.setScopes(scopes); Scope scope = new Scope("区块链"); kieSession.insert(corporation);
kieSession.insert(scope); kieSession.fireAllRules(); }
}

相关实体类:

@Data
public class Corporation { private Set<Scope> scopes; }
@Data
public class Scope { public Scope(String scope){
this.scope = scope;
} private String scope; }

然后看一下规则处理:

package com.containsVar

import com.secbro2.drools.entity.Corporation
import com.secbro2.drools.entity.Scope
import java.util.List rule "containsVar1" when $c: Corporation($scopes:scopes);
$s: Scope(scope == "P2P") from $scopes; then System.out.println("containsVar1行业类型为:P2P");
end rule "containsVar2" when $c: Corporation($scopes:scopes);
exists (Scope(scope == "P2P") from $scopes);
then System.out.println("containsVar2行业类型为:P2P"); end rule "containsVar3" when
$s: Scope(scope == "区块链")
$c: Corporation(scopes contains $s);
then System.out.println("containsVar3行业类型为:区块链"); end rule "containsVar4" when
$s: Scope(scope == "区块链")
exists (Corporation(scopes contains $s));
then System.out.println("containsVar4行业类型为:区块链"); end

在上述实例中列举了4中使用方法:

  • 第一种,首先获取Fact对象Corporation,并重新定义了它的属性$scopes。然后,通过from关键字来遍历$scopes中的值,获得符合条件的。此时并不需要传入Scope对应的fact对象。
  • 第二种,前半部分同第一种方式,是不过没有获取筛选的结果,直接用exists来判断是否存在。
  • 第三种,先获得满足条件的Scope的Fact对象,然后再利用此fact对Corporation的fact对象进行筛选,只有满足条件才可以继续。
  • 第四种,与第三种效果相同,原理同第二种方式的exists使用。

相关技术视频

CSDN学院:《Drools7规则引擎进阶教程》

CSDN学院:《Drools7规则引擎入门教程》

CSDN学院:《Drools7系列优惠套餐》

原文链接: http://www.choupangxia.com/2019/07/31/drools规则引擎-如果判断某个对象中的集合是否包含指/

Drools规则引擎-如果判断某个对象中的集合是否包含指定的值的更多相关文章

  1. Drools 规则引擎应用

    规则引擎-drools 1 .场景 1.1需求 商城系统消费赠送积分 100元以下, 不加分 100元-500元 加100分 500元-1000元 加500分 1000元 以上 加1000分 .... ...

  2. Drools 规则引擎应用 看这一篇就够了

    1 .场景 1.1需求 商城系统消费赠送积分 100元以下, 不加分 100元-500元 加100分 500元-1000元 加500分 1000元 以上 加1000分 ...... 1.2传统做法 1 ...

  3. Drools规则引擎-判断集合(List)是否包含集合

    问题场景 在使用Drools规则引擎时,有朋友会遇到这样的问题,就是在when部分判断的两个参数都是集合类型,比如两个List,此时要判断一个集合是否包含另外一个集合的内容. 拿一个具体的例子来说明, ...

  4. Drools规则引擎入门指南(一)

    最近项目需要增加风控系统,在经过一番调研以后决定使用Drools规则引擎.因为项目是基于SpringCloud的架构,所以此次学习使用了SpringBoot2.0版本结合Drools7.14.0.Fi ...

  5. drools规则引擎初探

    https://www.cnblogs.com/yuebintse/p/5767996.html 1.drools是什么 Drools是为Java量身定制的基于Charles  Forgy的RETE算 ...

  6. Drools规则引擎-memberOf操作

    场景 规则引擎技术讨论2群(715840230)有同学提出疑问,memberOf的使用过程中如果,memberOf之后的参数不是集合也不是数组,而是格式如"1,2,3,4"的字符串 ...

  7. Drools规则引擎实践直白总结

    目录 1. 创建Drools环境(引入Drools相关依赖包.现在都流行spring boot,故最简单有效的依赖才是最好的,kie-spring内部自行依赖了drools相关核心的依赖包) 2. 了 ...

  8. Drools 规则引擎环境搭建

    一.关于 drools 规则引擎 前面写过一篇 Drools 规则引擎相关的文章,这篇文章主要记录一下规则引擎的环境搭建和简单示例.不熟悉 drools 的朋友可以看看这篇文章: 自己写个 Drool ...

  9. 规则引擎-BRMS在企业开发中的应用

    1. 什么是规则复杂企业级项目的开发以及其中随外部条件不断变化的业务规则(business logic),迫切需要分离商业决策者的商业决策逻辑和应用开发者的技术决策,并把这些商业决策放在中心数据库或其 ...

随机推荐

  1. 高并发 Nginx+Lua OpenResty系列(6)——Lua开发库Mysql

    Mysql客户端 lua-resty-mysql是为基于cosocket API的ngx_lua提供的Lua Mysql客户端,通过它可以完成Mysql的操作.默认安装OpenResty时已经自带了该 ...

  2. Mybatis_three

    延迟加载 实现多对一的延迟加载(association) 例如下面的:有很多个账户信息(招商\工商\农商)是属于一个用户人的 [需求] 查询账户(Account)信息并且关联查询用户(User)信息. ...

  3. HBase 学习之路(十)—— HBase的SQL中间层 Phoenix

    一.Phoenix简介 Phoenix是HBase的开源SQL中间层,它允许你使用标准JDBC的方式来操作HBase上的数据.在Phoenix之前,如果你要访问HBase,只能调用它的Java API ...

  4. Spark2.4.0源码——DAGScheduler

    前言 Spark会将用户提交的作业看作一个job,在提交的时候首先将job转换为一系列的RDD,并按照RDD之间的依赖关系构建DAG(有向无环图),DAGScheduler会按照RDD依赖的不同将DA ...

  5. Asp.net HttpClient Proxy(Fiddler)

    <system.net> <defaultProxy> <proxy bypassonlocal="False" usesystemdefault=& ...

  6. JS中 【“逻辑运算”,“面试题:作用域问题”,“dom对象”】这些问题的意见见解

    1.逻辑运算 ||  &&  ! ||:遇到第一个为true的值就中止并返回 &&:遇到第一个为false的值就中止并返回,如果没有false值,就返回最后一个不是fa ...

  7. Python生成word

    Python生成word 使用python-docx-template库, 将html转为word. python-docx-template可以使用类似jinja2的模板语法. 依赖docx库, 安 ...

  8. SQL注入与防御

    SQL注入与防御 下载:https://pan.baidu.com/s/1ZiLVY2IxHXD9-bMRS61Fzg 提取码:yof2

  9. java集合框架中的去重问题

    对于自定义的类来说,必须要重写hashcode和equals方法 hashcode方法的作用是确定元素在数据结构中的位置,当两个元素的hash值一样时,需要用equals方法判断两个元素是否是一样的, ...

  10. Python 爬虫从入门到进阶之路(十五)

    之前的文章我们介绍了一下 Python 的 json 模块,本章我们就介绍一下之前根据 Xpath 模块做的爬取<糗事百科>的糗事进行丰富和完善. 在 Xpath 模块的爬取糗百的案例中我 ...