资讯专栏INFORMATION COLUMN

Drools规则引擎-memberOf操作

MrZONT / 2002人阅读

摘要:今天这批文章就带大家了解一下规则引擎中比较操作符之一的。对象类代码调用规则引擎代码欢迎张三欢迎张三张三规则代码,这里模拟了两种场景的规则判断规则触发规则触发执行结果规则触发规则触发

场景

规则引擎技术讨论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 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.ucloud.cn/yun/75397.html

相关文章

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

    摘要:规则引擎集合相关处理在实际生产过程中,有很多关于集合的处理场景,比如一个对象中包含有一个集合,而需要判断该集合是否包含某个值。而规则引擎也提供了多种处理方式,比如通过等进行操作,比较。然后,通过关键字来遍历中的值,获得符合条件的。 规则引擎集合相关处理 在实际生产过程中,有很多关于集合的处理场景,比如一个Fact对象中包含有一个集合,而需要判断该集合是否包含某个值。而Drools规则引...

    yuxue 评论0 收藏0
  • Drools规则引擎-判断集合(List)是否包含集合

    摘要:问题场景在使用规则引擎时,有朋友会遇到这样的问题,就是在部分判断的两个参数都是集合类型,比如两个,此时要判断一个集合是否包含另外一个集合的内容。 问题场景 在使用Drools规则引擎时,有朋友会遇到这样的问题,就是在when部分判断的两个参数都是集合类型,比如两个List,此时要判断一个集合是否包含另外一个集合的内容。 拿一个具体的例子来说明,我的公众号《程序新视界》接受商务合作有一定...

    Cc_2011 评论0 收藏0
  • Drools规则引擎-如果Fact对象参数为null如何处理

    摘要:比如对一个企业进行信用评级,涉及三个维度企业年龄企业注册资本与企业法人年龄。增加判断如果是将三个业务的判断放在一个规则当中,那么对对象为的情况就需要特殊处理了。 问题场景 在技术交流群(QQ:715840230)中有同学提出这样的问题: 往kiesession里面传入fact,如果不做输入检查fact里面有些字段可能是null值。但是如果在外面做输入检查,规则一改,fact所需要的字段...

    marser 评论0 收藏0
  • 网易考拉规则引擎平台架构设计与实践

    摘要:比如我们的指标是最近分钟的同一用户的下单量,那么我们就需要实现一种类似的滑动窗口算法,以便任何时候都能拿到最近分钟的数据。 此文已由作者肖凡授权网易云社区发布。 欢迎访问网易云社区,了解更多网易技术产品运营经验。 背景考拉安全部技术这块目前主要负责两块业务:一个是内审,主要是通过敏感日志管理平台搜集考拉所有后台系统的操作日志,数据导入到es后,结合storm进行实时计算,主要有行为查询...

    Berwin 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<