0

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

让我们看一下考试示例。想象一下考试有一个房间和一个列表的情况。现在我想检查一下 Room 对象是否在列表中。有没有像 roomList.contains(rooms) 这样的功能?

我需要这个用于 DRL。

谢谢

4

3 回答 3

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+,则直接调用方法。

于 2012-08-13T19:47:18.993 回答
1

如果您有机会了解 Java 中的集合框架列表...那么是的,我们确实有一个名为frequency().

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

Collections.frequency(l, "room1");
于 2012-08-12T21:02:57.527 回答
0

我有以下情况

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

我的 DRL 文件如下所示:

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 中。

很抱歉这个问题,但我没有找到任何语言参考。

于 2012-08-13T23:31:39.897 回答