Drools规则引擎-memberOf操作

简介: Drools规则引擎-memberOf操作

场景

规则引擎技术讨论2群(715840230)有同学提出疑问,memberOf的使用过程中如果,memberOf之后的参数不是集合也不是数组,而是格式如“1,2,3,4”的字符串,那么Drools是否会讲其转换成数组?


其实很显然,Drools规则引擎不会这么做,它也并不知道你定义的字符串的格式及分隔符是什么,不会像SpringMVC那样约定好以json格式进行解析。


今天这批文章就带大家了解一下drools规则引擎中比较操作符之一的memberOf。


使用方法

官方文档和网络上的资料给出的解释基本上都是:用来判断某个 Fact对象的某个字段是否在一个集合(Collection/Array)当中) 。


其中,这忽略了它的一个功能,就是如果它后面紧跟的不是集合或数组,而是字符串的话,它判断的标准就变为:该字符串是否包含Fact对象的字段内容了。当然这个过程并不会神奇的转换成数组什么的,仅仅类似于Java中String提供的contains方法的比较。


下面以具体的代码来展示基于集合和字符串的判断示例。


Fact对象类member代码:


public class Member {
  private String name;
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
}

调用规则引擎代码:

KieSession kieSession = getKieSession("memberOfSession");
String str = "欢迎张三!";
List<String> list = new ArrayList<>();
list.add("欢迎");
list.add("张三");
list.add("!");
Member member = new Member();
member.setName("张三");
kieSession.insert(str);
kieSession.insert(list);
kieSession.insert(member);
kieSession.fireAllRules();

规则代码,这里模拟了两种场景的规则判断:

package com.memberof
import com.secbro2.drools.entity.Member
import java.util.List
rule "memberofRule1"
when
    $s:String();
    $c:Member(name memberOf $s);
then
    System.out.println("memberofRule规则触发!");
end
rule "memberofRule2"
when
    $list:List();
    $c:Member(name memberOf $list);
then
    System.out.println("memberofRule2规则触发!");
end

执行结果:

memberofRule规则触发!
memberofRule2规则触发!
目录
相关文章
|
算法 IDE Java
《Drools7.0.0.Final规则引擎教程》第1章 Drools简介
《Drools7.0.0.Final规则引擎教程》第1章 Drools简介
1295 0
|
6月前
|
数据可视化 Java
探索Drools:Java世界的规则引擎
探索Drools:Java世界的规则引擎
388 1
|
算法 Java
3、Drools规则引擎-为什么选择Drools
Drools 是用 Java 语言编写的具有一个易于访问企业策略、易于调整以及易于管理的开源业务规则引擎 ,其基于CHARLES FORGY’S的RETE算法 符合业内标准,速度快且效率高。 业务分析师人员或审核人员可以利用它轻松查看业务规则, 检验已编码的规则执行了所需的业务规则。
273 0
|
存储 消息中间件 JavaScript
规则引擎深度对比,LiteFlow vs Drools! 上
规则引擎深度对比,LiteFlow vs Drools! 上
|
存储 SQL Java
规则引擎深度对比,LiteFlow vs Drools! 下
规则引擎深度对比,LiteFlow vs Drools! 下
1、Drools规则引擎-什么是规则引擎
### 什么是规则引擎 规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件, 实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。 接受数据输入,解释业务规则,并根据业务规则做出业务决策。
542 0
1、Drools规则引擎-什么是规则引擎
|
Java Spring
4、Drools规则引擎-Drools入门案例
Drools的实现并不难,关键是了解他的语法即可
291 0
4、Drools规则引擎-Drools入门案例
|
设计模式 数据挖掘
2、Drools规则引擎-为什么使用规则引擎
上文我们说过,规则引擎其实就是将if else全部给抽离出来了。但是这就是我们的规则引擎的全部内容吗?规则放在哪里都是放,为什么一定要拿规则引擎来抽离呢?肯定是规则引擎给我们解决了某些问题。本文主要讲的就是规则引擎是解决什么的方案
258 0
|
jenkins Shell 测试技术
自动化集成:Pipeline流水语法详解
围绕持续集成:Jenkins+Docker+K8S相关组件,实现自动化管理源码编译、打包、镜像构建、部署等操作;本篇文章主要描述Pipeline流水线用法。
444 0
自动化集成:Pipeline流水语法详解
|
Python
Drools规则引擎Map使用案例
Drools规则引擎Map使用案例
813 0
Drools规则引擎Map使用案例