用于检查对象是否在列表中的规则

时间:2012-08-12 20:52:51

标签: java drools drools-planner

如果对象也是列表的一部分,我如何通过Drools规则语言(DRL)进行检查?

我们来看看考试示例。想象一下考试有房间和列表的情况。现在我想检查一下,如果Room对象在List中。有没有像roomList.contains(rooms)这样的函数?

我需要这个用于DRL。

由于

3 个答案:

答案 0 :(得分:2)

对于这样的模型:

class Exam {
    Room room;
...
}
class Room {
    List<Room> roomsList;
...
}

然后你的规则可能如下:

rule X
when
    $exam1 : Exam()
    $exam2 : Exam( room.roomsList contains $exam1.room )
then
    // do something
end

您还可以使用“memberOf”运算符来检查元素是否是列表的成员,或者只是在使用Drools 5.4 +时直接调用方法。

答案 1 :(得分:1)

如果您有机会在Java中使用Collection of Collection框架...那么我们确实有一个名为frequency()的方法。

List<String> l = new ArrayList<String>();

Collections.frequency(l, "room1");

答案 2 :(得分:0)

我有以下情况

class Exam { 
   Room room;
   ...
}
class Room {
   List<Room> roomList
   ...
}

我的DRL-Files看起来像这样:

rule "containsRoomOfRoom"
when
    $topicConflict : TopicConflict($leftTopic : leftTopic, $rightTopic : rightTopic)
    $leftExam : Exam(topic == $leftTopic, $period : period, $leftRoom : room)
    $rightExam : Exam(topic == $rightTopic, period == $period, room.roomsList contains $leftRoom)
then
    insertLogical(new IntConstraintOccurrence("roomPenalty", ConstraintType.NEGATIVE_HARD,
            40,
            $leftExam, $rightExam));

我的问题是我想检查leftExam的房间是否在rightExam房间的roomList中。

对不起这个问题,但我找不到任何语言参考。