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


    规则引擎集合相关处理

    在实际生产过程中,有很多关于集合的处理场景,比如一个Fact对象中包含有一个集合,而需要判断该集合是否包含某个值。而Drools规则引擎也提供了多种处理方式,比如通过from、contains、exists等进行操作,比较。

    当然也可以通过function函数来做相应的比较,在个在其他章节讲到过,就不在此赘述。下面重点以几个实例才进行讲解,在具体实践中根据具体情况来进行运用。

    实例

    省略掉基本的配置,直接看调用代码和规则代码。

    测试调用代码:

    public class ContainsDemo extends BaseDemo {
    
    	public static void main(String[] args) {
    
    		KieSession kieSession = getKieSession("containsVar");
    
    		Corporation corporation = new Corporation();
    		Set<Scope> scopes = new HashSet<>();
    		scopes.add(new Scope("P2P"));
    		scopes.add(new Scope("金融"));
    		scopes.add(new Scope("区块链"));
    		corporation.setScopes(scopes);
    
    		Scope scope = new Scope("区块链");
    
    		kieSession.insert(corporation);
    		kieSession.insert(scope);
    
    		kieSession.fireAllRules();
    
    	}
    }
    

    相关实体类:

    @Data
    public class Corporation {
    
    	private Set<Scope> scopes;
    
    }
    
    @Data
    public class Scope {
    
    
    	public Scope(String scope){
    		this.scope = scope;
    	}
    
    	private String scope;
    
    }
    

    然后看一下规则处理:

    package com.containsVar
    
    import com.secbro2.drools.entity.Corporation
    import com.secbro2.drools.entity.Scope
    import java.util.List
    
    rule "containsVar1"
    
    when
    
        $c: Corporation($scopes:scopes);
        $s: Scope(scope == "P2P") from $scopes;
    
    then
    
        System.out.println("containsVar1行业类型为:P2P");
    end
    
    rule "containsVar2"
    
    when
    
        $c: Corporation($scopes:scopes);
        exists (Scope(scope == "P2P") from $scopes);
    then
    
        System.out.println("containsVar2行业类型为:P2P");
    
    end
    
    
    rule "containsVar3"
    
    when
        $s: Scope(scope == "区块链")
        $c: Corporation(scopes contains $s);
    then
    
        System.out.println("containsVar3行业类型为:区块链");
    
    end
    
    rule "containsVar4"
    
    when
        $s: Scope(scope == "区块链")
        exists (Corporation(scopes contains $s));
    then
    
        System.out.println("containsVar4行业类型为:区块链");
    
    end
    

    在上述实例中列举了4中使用方法:

    • 第一种,首先获取Fact对象Corporation,并重新定义了它的属性$scopes。然后,通过from关键字来遍历$scopes中的值,获得符合条件的。此时并不需要传入Scope对应的fact对象。
    • 第二种,前半部分同第一种方式,是不过没有获取筛选的结果,直接用exists来判断是否存在。
    • 第三种,先获得满足条件的Scope的Fact对象,然后再利用此fact对Corporation的fact对象进行筛选,只有满足条件才可以继续。
    • 第四种,与第三种效果相同,原理同第二种方式的exists使用。

    相关技术视频

    CSDN学院:《Drools7规则引擎进阶教程》

    CSDN学院:《Drools7规则引擎入门教程》

    CSDN学院:《Drools7系列优惠套餐》

    原文链接: http://www.choupangxia.com/2019/07/31/drools规则引擎-如果判断某个对象中的集合是否包含指/

  • 相关阅读:
    【Cloud Foundry】Could Foundry学习(二)——核心组件分析
    POJ 1789-Truck History
    设置静态IP
    oracle切割字符串后以单列多行展示
    SQL server语句练习
    hdu 3308 LCIS(线段树)
    HDU 1556 Color the Ball 线段树 题解
    CSipSimple最新版本号
    奢侈品行业-新手专题-亿邦动力网
    单身潮_百度百科
  • 原文地址:https://www.cnblogs.com/secbro/p/11279098.html
Copyright © 2020-2023  润新知