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规则触发!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?