如果對象也是列表的一部分,如何通過Drools規則語言(DRL)進行檢查?檢查對象是否在列表中的規則
讓我們來看看考試範例。形象化考試有一個房間和一個列表的情況。現在我想檢查一下,如果Room對象在列表中。是否有像roomList.contains(房間)這樣的功能?
我需要這個DRL。
感謝
如果對象也是列表的一部分,如何通過Drools規則語言(DRL)進行檢查?檢查對象是否在列表中的規則
讓我們來看看考試範例。形象化考試有一個房間和一個列表的情況。現在我想檢查一下,如果Room對象在列表中。是否有像roomList.contains(房間)這樣的功能?
我需要這個DRL。
感謝
如果你是通過採取對集合框架的Java中的列表任何的機會......那麼是的,我們確實有一種稱爲frequency()
。
List<String> l = new ArrayList<String>();
Collections.frequency(l, "room1");
對於這樣一個模型:
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
您還可以使用「成員」操作員檢查元素是否爲成員一個列表,或者直接調用方法,如果你正在使用Drools 5.4+。
我有以下的情況
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的房間的房間列表中。
對不起,這個問題,但我沒有找到任何語言參考。
您應該將此信息添加到您的原始問題中,而不是將其添加爲問題的答案。我編輯了我以前的答案,給你一個類似的例子。 – 2012-08-14 00:40:54
我改變了上述問題的DRL文件!我得到這個錯誤: java.lang.RuntimeException:無法調用getter:getRoom [declr.class:domain.Exam; act.class:domain.Exam](見跟蹤) 引起:java.lang.RuntimeException:無法調用方法:domain.Room.getRoomslist:方法的目標爲空 – Vivid 2012-08-14 16:47:14
問題似乎是room.roomsList。有時roomList是空的。但它永遠不應該是空的。也許drools不能訪問房間列表。 – Vivid 2012-08-14 16:56:11
不知道這是否回答了這個問題,但很高興知道! – MadProgrammer 2012-08-12 21:08:57
但是,這是無法檢查DRL(Drools規則語言)。 – Vivid 2012-08-12 21:16:46