前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Drools规则引擎-memberOf操作

Drools规则引擎-memberOf操作

作者头像
程序新视界
发布2019-08-01 11:39:58
1.1K0
发布2019-08-01 11:39:58
举报
文章被收录于专栏:丑胖侠丑胖侠

场景

规则引擎技术讨论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规则触发!

原文链接:https://www.choupangxia.com/2019/07/15/drools规则引擎-memberof操作/

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年07月15日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 场景
  • 使用方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档