Drools检查列表中的重复字段

时间:2012-10-24 14:47:56

标签: drools

我有一个对象A,它包含一个对象列表B,它包含各种字段,包括日期字段。我需要编写一个规则,检查日期在列表中是唯一的,但我有点陷入如何做到这一点...我有类似的东西:

rule "Check Unique Dates"
dialect "mvel"
when
    a : A
    list : java.util.List( ) from collect ( Date B.date (B.date!= null))
    set : java.util.Set( ) from collect ( Date B.date(B.date!= null))
    eval(list.size() == set.size())
then
    //do something
end

我要做的是将对象B中的日期添加到列表中,并添加到集合中并比较2的大小但是我收到错误:

[ERR 102] Line 15:54 mismatched input 'B' in rule "Check Unique Dates" [0,0]: Parser returned a null Package

知道我做错了吗?

我还需要通过A中的名称字段来限制它,因为可以有多个A ...

实例

我认为......更接近......

when
    a : A

    b1 : B( d : date, date!= null )
    b2: B( date == d , eval( this != b1) )

但这会检查B的所有实例,即使它们不在此A实例的列表中(即使只有6个B实例,规则也会触发1200次!?)...如何限制检查只查找此A实例中的重复项?

2 个答案:

答案 0 :(得分:3)

这就是我提出的......它的确有效:

when
    a : A( name == "xyz", coll : listOfB)       
    b1 : B( date1 : date, date!= null ) from coll
    b2 : B( date == date1, this != b1) from coll

then

现在我需要去一个黑暗的房间里躺下......

答案 1 :(得分:0)

我认为最好创建一个单独的方法来检查重复项, 例如ListUtils.hasDuplicate(列表)