如果对象也是列表的一部分,我如何通过Drools规则语言(DRL)进行检查?
我们来看看考试示例。想象一下考试有房间和列表的情况。现在我想检查一下,如果Room对象在List中。有没有像roomList.contains(rooms)这样的函数?
我需要这个用于DRL。
由于
答案 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中。
对不起这个问题,但我找不到任何语言参考。