资讯专栏INFORMATION COLUMN

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

yuxue / 3294人阅读

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

规则引擎集合相关处理

在实际生产过程中,有很多关于集合的处理场景,比如一个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 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 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/20...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/75718.html

相关文章

  • Drools规则引擎-memberOf操作

    摘要:今天这批文章就带大家了解一下规则引擎中比较操作符之一的。对象类代码调用规则引擎代码欢迎张三欢迎张三张三规则代码,这里模拟了两种场景的规则判断规则触发规则触发执行结果规则触发规则触发 场景 规则引擎技术讨论2群(715840230)有同学提出疑问,memberOf的使用过程中如果,memberOf之后的参数不是集合也不是数组,而是格式如1,2,3,4的字符串,那么Drools是否会讲其转...

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

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

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

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

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

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

    marser 评论0 收藏0

发表评论

0条评论

yuxue

|高级讲师

TA的文章

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