在drools中比较工作记忆中的对象(事实)

时间:2014-09-15 09:41:48

标签: java drools rule drools-flow

我正在通过DRT(规则模板)读取excel表,然后通过Java类中的静态方法将其转换为类的Object。并将其插入工作memroty。通过这种方式,工作内存中填满了Excel表格中的所有事实。

现在,我通过会话在INSERT()中通过Java类发送事实。 我需要匹配两个相似的对象并从工作内存中返回匹配的对象。 至于例子:

从Excel中读取并插入工作内存。 人(姓名==“Kumar”,年龄= = 60,状态==真);

现在在Java类中,通过会话我插入以下对象: 人(姓名==“Kumar”,年龄= = 60); 然后我需要通过比较两个对象来设置Status = true。

我需要编写将比较两个对象的规则。

请提出一些建议。

由于 Shorav

1 个答案:

答案 0 :(得分:1)

如果我们必须假设有可能有三个或更多相似的"事实上最好这样做:

rule "find same name and age"
when
    $p1: Person( $name: name, $age: age, status == false )
    $p2: Person( name == name, age == $age, status == false, this != $p1 )
    accumulate( $p: Person( name == name, age == $age, status == false );
                $list: collectList( $p ) )
then
    for( int i = 0; i < $list.size(); i++ ){
        Person p = (Person)$list.get(i);
        update( p ){ setStatus( true ) }
    }
end