首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Drools:如何比较drools中两个不同对象的属性?

在Drools中,可以使用规则语言和规则引擎来比较两个不同对象的属性。以下是一种常见的比较方法:

  1. 首先,在Drools规则文件中定义规则,例如:
代码语言:txt
复制
rule "Compare Objects"
when
    $obj1: Object1()
    $obj2: Object2()
    // 定义需要比较的属性
    $prop1: String() from $obj1.getProperty()
    $prop2: String() from $obj2.getProperty()
    // 定义需要满足的条件
    eval($prop1.equals($prop2))
then
    // 规则匹配成功后的操作
    System.out.println("Objects have the same property value");
end
  1. 在Java代码中,使用Drools引擎加载规则文件并执行规则:
代码语言:java
复制
// 创建KieServices实例
KieServices kieServices = KieServices.Factory.get();
// 加载规则文件
KieContainer kieContainer = kieServices.getKieClasspathContainer();
// 创建KieSession
KieSession kieSession = kieContainer.newKieSession();
// 创建对象并设置属性值
Object1 obj1 = new Object1();
obj1.setProperty("value1");
Object2 obj2 = new Object2();
obj2.setProperty("value2");
// 将对象插入到KieSession中
kieSession.insert(obj1);
kieSession.insert(obj2);
// 执行规则
kieSession.fireAllRules();
// 关闭KieSession
kieSession.dispose();

在上述规则中,我们通过eval($prop1.equals($prop2))来比较两个对象的属性值是否相等。如果相等,规则就会匹配成功,并执行规则中定义的操作。

需要注意的是,以上示例仅为演示Drools中比较两个不同对象属性的方法,并不涉及具体的腾讯云产品。如果您需要了解腾讯云在云计算领域的相关产品和服务,建议您访问腾讯云官方网站(https://cloud.tencent.com/)以获取更详细的信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

规则引擎集合相关处理 在实际生产过程,有很多关于集合处理场景,比如一个Fact对象包含有一个集合,而需要判断该集合是否包含某个值。...而Drools规则引擎也提供了多种处理方式,比如通过from、contains、exists等进行操作,比较。 当然也可以通过function函数来做相应比较,在个在其他章节讲到过,就不在此赘述。...4使用方法: 第一种,首先获取Fact对象Corporation,并重新定义了它属性scopes。...然后,通过from关键字来遍历scopes值,获得符合条件。此时并不需要传入Scope对应fact对象。...第三种,先获得满足条件ScopeFact对象,然后再利用此fact对Corporationfact对象进行筛选,只有满足条件才可以继续。

2.5K40

Drools二】打工人学习Drools基础语法

2.2 Pattern模式匹配 Drools匹配器可以将Rule Base所有规则与Working MemoryFact对象进行模式匹配,那么我们就需要在规则体LHS部分定义规则并进行模式匹配...对象某个属性是否在一个或多个集合 not memberOf 判断一个Fact对象某个属性是否不在一个或多个集合 matches 判断一个Fact对象属性是否与提供标准Java正则表达式进行匹配...not matches 判断一个Fact对象属性是否不与提供标准Java正则表达式进行匹配 前6个比较操作符和Java完全相同,下面我们重点学习后6个比较操作符。...那么如果我们只想执行其中某个规则如何实现呢? Drools给我们提供方式是通过规则过滤器来实现执行指定规则。...与activation-group不同是,activation-group定义分组只能够有一个规则可以被触发,而agenda-group分组多个规则都可以被触发。

2K20
  • Java比较两个对象属性值是否相同【使用反射实现】

    在工作,有些场景下,我们需要对比两个完全一样对象属性值是否相等。比如接口替换时候,需要比较新老接口在相同情况下返回数据是否相同。这个时候,我们怎么处理呢?... 把对应属性 propertyName  get 和 set 方法保存到属性描述器                 pd = new PropertyDescriptor(propertyName,...// 获取 clazz类型propertyName属性描述器         PropertyDescriptor pd = getPropertyDescriptor(clazz, propertyName...// 获取clazz类型propertyName属性描述器         PropertyDescriptor pd = getPropertyDescriptor(clazz, propertyName...propertyName:{}",e.getMessage(),propertyName);         }         return value;     }     /**      * 根据对象属性名称获取到对应属性类型

    3.5K30

    规则引擎Drools在贷后催收业务应用

    本篇文章主要介绍了规则引擎概念以及Kie和Drools关系,重点讲解了Drools规则文件编写以及匹配算法Rete原理。文章最后为大家展示了规则引擎在催收系统如何使用,主要解决问题等。...UberFire是一个基于 Eclipse 富客户端平台web框架。2.1.2 Drools介绍Drools 基本功能是将传入数据或事实与规则条件进行匹配,并确定是否以及如何执行规则。...编译算法描述了如何处理生产内存规则以生成有效决策网络。在非技术术语,决策网络用于在数据通过网络传播时对其进行过滤。...3.two-input-node(双输入节点)【BetaNode】:用于比较两个对象两个对象可能是相同或不同类型。上述案例中用到join node就是betaNode一种类型。...最后结合催收系统给大家讲解了Drools在催收系统如何使用。通过规则引擎引入让开发人员不再需要参与到规则开发与维护来,极大节约了开发成本。

    1.5K21

    Drools6.4 中文文档》第1章1.3(完)

    设置系统属性drools.compiler”,比如:-Ddrools.compiler=JANINO。 如果想了解到最新依赖版本,可以查看发布版本POM文件。...1.3.1.3 运行时 这里提到“运行时”是以二进制形式部署规则(或者是KnowledgePackage对象,或者KnowledgeBase对象等)。这是一个可选特性,可以让你运行时变得非常轻便。...点击Add按钮,定义一个新运行时。在弹出框配置运行时名称和本地系统文件路径。 一般情况,可以有两个选择: 1....可以在任何时候打开项目属性(右击项目选择Properties)修改Drools项目的运行时配置,选择Drools分类,如下图。...Eclipse无法直接找到它们,除非告诉它资源库位置,设置M2_REPO环境变量。 译者批注 翻译同时也在操作实践,发现不同版本Eclipse显示界面和配置项有所不同

    1.5K40

    使用Docker部署Workbench

    拉取镜像 docker pull jboss/drools-workbench-showcase:latest 镜像文件比较大,870多M,可能需要一些时间,不要着急。 2....接着呢,进入drools-test项目,点击屏幕右方Add Asset按钮。我在这里为大家演示一下下方三个如何操作,剩下就要靠你自己去探索了。 ?...数据对象,这个数据对象其实就是Java实体类了,我们这里创建一个名为Dog对象,然后进入这个数据对象就会发现有一个添加字段按钮可以供我们添加各种字段,然后左侧源代码可以让我们直观感受到创建之后对象到底为何物...我在这里为Dog添加了name和age属性 向导型规则模板,这个就是我们规则对象,创建一个规则对象hello,进入hello之后有一个事是必须注意,我们想引用刚才创建Dog对象,得先去数据对象标签页新建一个条目...Java获取规则文件 规则文件既然已经发布了,那么接下来就是Java出场时候了。 创建一个实体Dog,这里注意是包名、类名还有属性都要与上方在Workbench创建保持一致。

    2.3K00

    Drools规则引擎-如果Fact对象参数为null如何处理

    但是如果在外面做输入检查,规则一改,fact所需要字段不一样了,输入检查也要跟着改,耦合比较强。有没有比较方法呢?...从两个维度来讲: 减少耦合 如果想真正减少耦合,那么可将三个维度进行拆分,不放在一个fact对象传入,而是三个规则,每个规则都计算对应值,最终将结果逐个相加。...比如在when我们只获取类型为企业fact对象,而不具体限定条件。这样只要是企业对象进入,都会被规则匹配,而具体分值计算放在then部分进行处理。...其他方法 那么,针对那位同学问题,他想通过在插入fact对象之前进行校验排查,这其实是一种选择,选择默认属性为null得分为0。.../2019/07/26/drools规则引擎-如果fact对象参数为null如何处理/

    76010

    小明历险记:规则引擎Drools教程一

    而引擎是事物内部重要运行机制,规则引擎即重点是解决规则如何描述,如何执行,如何监控等一系列问题。...逻辑和数据分离 数据位于“域对象,业务逻辑位于“规则”。根据项目的种类,这种分离是非常有利。 速度和可扩展性 写入DroolsRete OO算法已经是一个成熟算法。...Rete 匹配算法是一种进行大量模式集合和大量对象集合间比较高效方法,通过网络筛选方法找出所有匹配各个模式对象和规则。...Drools优点: 非常活跃社区支持 易用 快速执行速度 在 Java 开发人员中流行 与 Java Rule Engine API(JSR 94)兼容 Drools相关概念: 事实(Fact):对象之间及对象属性之间关系...lock-on-active 将lock-on-active属性值设置为true,可避免因某些Fact对象被修改而使已经执行过规则再次被激活执行。

    1.1K30

    Drools】值得打工人学习规则引擎Drools<一>

    Drools介绍 drools是一款由JBoss组织提供基于Java语言开发开源规则引擎,可以将复杂且多变业务规则从硬编码解放出来,以规则脚本形式存放在文件或特定存储介质(例如存放在数据库...)又包括: Pattern Matcher(匹配器): 具体匹配哪一个规则,由这个完成,将Rule Base所有规则与Working MemoryFact对象进行模式匹配,匹配成功规则将被激活并放入...Fact:事实,是指在drools 规则应用当中,**将一个普通JavaBean插入到Working Memory后对象就是Fact对象**,Fact对象是我们应用和规则引擎进行数据交互桥梁或通道...规则引擎应用场景 对于一些存在比较复杂业务规则并且业务规则会频繁变动系统比较适合使用规则引擎,如下: 1、风险控制系统----风险贷款、风险评估 2、反欺诈项目----银行贷款、征信验证 3...true //将lock-on-active属性值设置为true,可避免因某些Fact对象被修改而使已经执行过规则再次被激活执行。

    8.2K20

    规则引擎深度对比,LiteFlow vs Drools

    https://gitee.com/dromara/liteFlow 这篇文章我们就来深入比较下这两款框架,都适合用在什么样场景,有什么异同点,以及在相同场景下表现力如何。...所以评判一个规则引擎是否合格主要因素有: 有没有灵活规则表达式来支持 规则和Java之间能否非常方便联动 API调用是否方便,和各种场景系统集成如何 侵入性耦合比较 规则学习成本,是否容易上手...在LiteFlow脚本组件,Groovy也可以通过import 来引入java任何包来调用。 Drools,可以直接引用到fact对象。...侵入性耦合比较 Drools需要在java代码里需要用到规则地方用KSession对象去匹配规则进行调用。规则和java是分离。在调用层面耦合了KSession调用对象。...结语 为什么会拿Drools来作为比较,其一在题主心中,Drools一直是规则引擎界标杆,drools有很多理念非常值得学习。

    5.3K41

    Drools7.0.0.Final规则引擎教程》番外实例篇——Map使用案例

    背景 技术交流群,不少朋友在问,如何Drools规则文件中使用Map。今天就用实例带大家了解一下map使用方法。...; } 首先,我们创建了一个map,map存放了两个Person对象,随后将map insert到了session。其中这两个Person年纪是不同。...另外就是给map定义一个变量,获取了mapkey为p1对象,并比较p1这个对象与$obj对象是否相当,不相等的话满足条件。在上面的过程实现了一种从map获取对象方法。...然后再看一下RHS部分,直接使用get方法从map获取值,并强转为原始对象,调用对象对应方法。...目前国内第一套关于Drools(7)入门教程《Drools 7 规则引擎入门教程》正在火热录制,其他更多关于Drools系列教程也在筹划,希望大家多多支持。

    1.4K80

    调研技术组件模板V1 —— 以 Drools 为例

    Drools相关概念 事实(Fact):对象之间及对象属性之间关系 规则(rule):是由条件和结论构成推理语句,一般表示为if…Then。一个规则if部分称为LHS,then部分称为RHS。...Rete 匹配算法是一种进行大量模式集合和大量对象集合间比较高效方法,通过网络筛选方法找出所有匹配各个模式对象和规则。...其核心思想是将分离匹配项根据内容动态构造匹配树,以达到显著降低计算量效果。Rete 算法可以被分为两个部分:规则编译和规则执行。...image.png Drools Rete 算法被称为 ReteOO,表示 Drools 为面向对象系统(Object Oriented systems)增强并优化了 Rete 算法。...所以,规则引擎适用于「问题确定」场景,并且存在比较复杂业务规则并且业务规则会「频繁变动」系统。

    78710

    Drools 7 规则引擎教程》番外篇-规则条件匹配机制

    规则引擎在执行AgendaFilter之前已经将所有的规则文件约束(when)部分代码进行判断,计算出符合条件规则。这样做好处是可以综合利用条件和FACT对象等资源,减少总体约束判断工作量。...这样机制还有一个需要注意问题,比如两个规则when部分使用到了不同参数,在调用规则时只传递了一个规则参数,另外一个规则参数未传递(因为我们不需要),这是那个未传递参数规则可能会抛出异常,影响正常规则处理...这个问题在drools5.x版本是恶汉模式,急切创建匹配,在drools6.x版本已经改成懒汉模式,只有在你尝试去匹配规则时才会做约束条件判断匹配工作。...那么,使用agenda-group或其他group或enabled属性控制,是否能达到分组效果。然而,答案是否定。这些属性生效时机依旧在约束条件判断之后。...解决方案 对于这个问题并没有很好解决方案。但可以使用简单粗暴方式,就是根据规则package进行划分,创建不同session,尽量减少不同规则之间相互影响。

    1.2K80

    这种场景你还写ifelse你跟孩子坐一桌去吧

    有个小请求,需要调整下年龄段,因为现在学生处对象比较早,有对象更容易买某某某东西。要改下值!辛苦辛苦!老板,在等着呢!一大片值要修改,哎!这么多ifelse了星期五.半夜歪歪喂!...在初始化方法,构建```KieServices.Factory.get();```,这个过程是比较耗费资源,实际业务使用也不会频繁构建。 2....从```KieServices```获取```KieContainer```,用于给定KieModule所有kiebase容器。 3. 设置FACT对象,其实就是你决策对象一些条件值。...**test_drools() 执行规则** 1. 获取kmodule.xml配置名称为all-rulessession,默认为有状态。 2....):B|红色B 在测试过程可以尝试修改入参信息,以此验证不同结果。

    93950

    Drools7.0.0.Final规则引擎教程》第4章 4.1 规则文件

    像java是import一样,还可以导入类某一个可访问静态方法。(特别注意是,某些教程中提示import引入静态方法是不同于java一方面,可能是作者没有用过java静态方法引入。)...一条规则包含三部分:属性部分、条件部分和结果部分。rule规则以rule开头,以end结尾。 属性部分:定义当前规则执行一些属性等,比如是否可被重复执行、过期时间、生效时间等。...定义当前规则条件,处于when和then之间。如when Message();判断当前workingMemory是否存在Message对象。...利用这些函数可以实现对当前Working MemoryFact对象进行新增、修改或删除操作;如果还要使用Drools提供其它方法,可以使用另一个外宏对象drools,通过该对象可以使用更多方法;...同时Drools 还提供了一个名为kcontext对象,可以通过该对象直接访问当前Working Memory KnowledgeRuntime。

    95350

    Google Aviator——轻量级 Java 表达式引擎实战

    表达式引擎技术及比较Drools 简介Drools(JBoss Rules )是一个开源业务规则引擎,符合业内标准,速度快、效率高。...目前,Drools提供了三种语义模块Python模块Java模块Groovy模块Drools规则是写在drl文件。...是一个高性能规则引擎,但是设计使用场景和在本次测试场景并不太一样,Drools目标是一个复杂对象比如有上百上千属性,怎么快速匹配规则,而不是简单对象重复匹配规则,因此在这次测试结果垫底。...这种模式下有两个问题:每次都重新编译,如果你脚本没有变化,这个开销是浪费,非常影响性能。...cacheKey 是用来指定缓存 key,如果你脚本特别长,默认使用脚本作为 key 会占用较多内存并耗费 CPU 做字符串比较检测,可以使用 MD5 之类唯一键值来降低缓存开销。

    4.5K30

    Drools三】打工人学习Drools高级语法

    ,它可以让应用程序对象在规则文件能够被访问。...语法结构为:global 对象类型 对象名称 在使用global定义全局变量时有两点需要注意: 1、如果对象类型为包装类型时,在一个规则改变了global值,那么只针对当前规则有效,对其他规则...); kieSession.fireAllRules(); 上面第一个规则只会执行一次,因为Working Memory存在两个满足条件Fact对象,第二个规则会执行两次。...一般在RHS部分需要进行业务处理。 在RHS部分Drools为我们提供了一个内置对象,名称就是drools。本小节我们来介绍几个drools对象提供方法。...每个规则最好都加上salience属性,明确执行顺序 Drools默认dialect为"Java",尽量避免使用dialect “mvel” 参考资料 1.Drools5规则引擎开发教程

    2.6K10
    领券