zoukankan      html  css  js  c++  java
  • 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规则触发!
    

    csdn-微信公众号

  • 相关阅读:
    django操作mysql时django.db.utils.OperationalError: (2003, "Can't connect to MySQL server")异常的解决方法
    Django实践:个人博客系统(第七章 Model的设计和使用)
    shared_ptr / weak_ptr 代码片段
    Java中比较容易混淆的知识点
    指针和引用作为参数的区别
    STL 算法
    STL扩展容器
    STL中 map 和 multimap
    STL中 set 和 multiset
    <<C++标准程序库>>中的STL简单学习笔记
  • 原文地址:https://www.cnblogs.com/secbro/p/11191692.html
Copyright © 2011-2022 走看看