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

规则引擎集合相关处理

在实际生产过程中,有很多关于集合的处理场景,比如一个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%e8%a7%84%e5%88%99%e5%bc%95%e6%93%8e-%e5%a6%82%e6%9e%9c%e5%88%a4%e6%96%ad%e6%9f%90%e4%b8%aa%e5%af%b9%e8%b1%a1%e4%b8%ad%e7%9a%84%e9%9b%86%e5%90%88%e6%98%af%e5%90%a6%e5%8c%85%e5%90%ab%e6%8c%87/

原文地址:https://www.cnblogs.com/secbro/p/11279098.html

时间: 2024-07-30 12:06:00

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

drools规则引擎因为内存泄露导致的内存溢出

进入这个问题之前,先了解一下drools: 在很多行业应用中比如银行.保险领域,业务规则往往非常复杂,并且规则处于不断更新变化中,而现有很多系统做法基本上都是将业务规则绑定在程序代码中. 主要存在的问题有以下几个方面: 1) 当业务规则变更时,对应的代码也得跟着更改,每次即使是小的变更都需要经历开发.测试验证上线等过程,变更成本比较大. 2) 长时间系统变得越来越难以维护. 3) 开发团队一般是由一个熟悉业务的BA(业务分析人员)和若干个熟悉技术的开发人员组成,开发人员对业务规则的把握能力远不及

drools规则引擎初探

1.drools是什么 Drools是为Java量身定制的基于Charles  Forgy的RETE算法的规则引擎的实现.具有了OO接口的RETE,使得商业规则有了更自然的表达. Rule是什么呢? 一条规则是对商业知识的编码.一条规则有 attributes ,一个 Left Hand Side ( LHS )和一个 Right Hand Side ( RHS ).Drools 允许下列几种 attributes : salience , agenda-group , no-loop , au

Drools 规则引擎环境搭建

一.关于 drools 规则引擎 前面写过一篇 Drools 规则引擎相关的文章,这篇文章主要记录一下规则引擎的环境搭建和简单示例.不熟悉 drools 的朋友可以看看这篇文章: 自己写个 Drools 文件语法检查工具--栈的应用之编译器检测语法错误 介绍的内容: Drools 规则引擎的使用场景 Drools 规则引擎的优点 Drools的基本工作工程(Fact对象.Drl文件内容.Drools的基础语法) drools 文件的形式 Drools 文件语法初步检查 二 .Drools 的环境

Drools规则引擎初窥---drl和决策表实现[实例]

因项目需要,看了下drools规则引擎.写了一个比较简单的drools的drl规则和决策表实现的例子. 规则说明: 网络商城要举办活动(奖励额外积分), 订单原价金额在 100以下, 不加分 100-500 加100分 500-1000 加500分 1000 以上 加1000分 1.建立最基本的Drools项目结构并引入必须的类库.(这里采用junit来执行单元测试).创建一个Java Project,建立maven形式的源码包. 2.定义实体类Order.java 1 import java.

Spring Boot+Drools规则引擎整合

目的 官方的Drools范例大都是基于纯Java项目或Maven项目,而基于Spring Boot项目的很少. 本文介绍如何在Spring Boot项目上加上Drools规则引擎. POM依赖 POM文件如下: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=&q

SpringBoot2 整合 Drools规则引擎,实现高效的业务规则

本文源码:GitHub·点这里 || GitEE·点这里 一.Drools引擎简介 1.基础简介 Drools是一个基于java的规则引擎,开源的,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的形式存放在文件中,使得规则的变更不需要修正代码重启机器就可以立即在线上环境生效.具有易于访问企业策略.易于调整以及易于管理的特点,作为开源业务规则引擎,符合业内标准,速度快.效率高. 2.规则语法 (1).演示drl文件格式 package droolRule ; import org.slf4j.

Drools 规则引擎 BRMS

安装说明 | Drools中文网 http://www.drools.org.cn/category/install Drools规则引擎-在微服务中的应用 - 简书 https://www.jianshu.com/p/887ff9021eb3 Drools规则引擎-在微服务中的应用 - 简书 https://www.jianshu.com/p/887ff9021eb3 微服务组件-规则引擎 - Fx_demon - OSCHINA https://my.oschina.net/fxdemon/

判断JSON返回的对象中的firstName这一列的值是否包含指定的字符

判断JSON返回的对象中的firstName这一列的值是否包含指定的字符,如果包含指定字符则返回true,否则返回false 标签: <无> 代码片段(1)[全屏查看所有代码] 1. [代码][其他]代码 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51

【Stackoverflow好问题】java中,如何判断数组Array是否包含指定的值

问题 java中,如何判断数组Array是否包含指定的值 精华回答 1. Arrays.asList(...).contains(...) 2. 使用 Apache Commons Lang包中的ArrayUtils.contains String[] fieldsToInclude = { "id", "name", "location" }; if ( ArrayUtils.contains( fieldsToInclude, "i