如果对象也是列表的一部分,我如何通过 Drools 规则语言 (DRL) 检查?
让我们看一下考试示例。想象一下考试有一个房间和一个列表的情况。现在我想检查一下 Room 对象是否在列表中。有没有像 roomList.contains(rooms) 这样的功能?
我需要这个用于 DRL。
谢谢
如果对象也是列表的一部分,我如何通过 Drools 规则语言 (DRL) 检查?
让我们看一下考试示例。想象一下考试有一个房间和一个列表的情况。现在我想检查一下 Room 对象是否在列表中。有没有像 roomList.contains(rooms) 这样的功能?
我需要这个用于 DRL。
谢谢
对于这样的模型:
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+,则直接调用方法。
如果您有机会了解 Java 中的集合框架列表...那么是的,我们确实有一个名为frequency()
.
List<String> l = new ArrayList<String>();
Collections.frequency(l, "room1");
我有以下情况
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 中。
很抱歉这个问题,但我没有找到任何语言参考。