前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Drools规则引擎-如果判断某个对象中的集合是否包含指定的值

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

作者头像
程序新视界
发布2019-08-14 11:27:00
2.5K0
发布2019-08-14 11:27:00
举报
文章被收录于专栏:丑胖侠

规则引擎集合相关处理

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

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

实例

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

测试调用代码:

代码语言:javascript
复制
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();

	}
}

相关实体类:

代码语言:javascript
复制
@Data
public class Corporation {

	private Set<Scope> scopes;

}
代码语言:javascript
复制
@Data
public class Scope {


	public Scope(String scope){
		this.scope = scope;
	}

	private String scope;

}

然后看一下规则处理:

代码语言:javascript
复制
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。然后,通过from关键字来遍历scopes。然后,通过from关键字来遍历scopes中的值,获得符合条件的。此时并不需要传入Scope对应的fact对象。
  • 第二种,前半部分同第一种方式,是不过没有获取筛选的结果,直接用exists来判断是否存在。
  • 第三种,先获得满足条件的Scope的Fact对象,然后再利用此fact对Corporation的fact对象进行筛选,只有满足条件才可以继续。
  • 第四种,与第三种效果相同,原理同第二种方式的exists使用。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年07月31日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 规则引擎集合相关处理
  • 实例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档