1
我的要求是匹配標籤。在該示例中,該特定HourConstraint
檢查分配給Hour(23)
的TeacherHour
。匹配一個列表(標籤)與另一個列表並檢測是否存在共同元素
具體而言,它會檢查TeacherHour.attributes["tags"]
爲值["asst_ct","teacher_john_smith"]
和在這種情況下(兩個"asst_ct"
和"teacher_john_smith"
)ATLEAST一個匹配兩個檢測。
TeacherHour:
id: 47
assigned_hour: Null
attributes:Map<List<String>>
"tags":["asst_ct","no_strenuous_duties","kinda_boring","teacher_john_smith"]
"another_attribute":[...]
HourConstraint:
hour: Hour(23)
attribute: "tags"
values_list: ["asst_ct","teacher_john_smith"]
問題:如何檢測的共同元素的存在(true或false)兩個列表?
Drools Expert有memberOf
和contains
,但他們檢查標量vs集合,從來沒有集合vs集合。
我看到兩種可能方式:
- 引入功能
boolean isIntersecting(list,list)
告訴Drools的使用,對真理檢查 - 實現
TeacherHour.attributes[]
作爲一個字符串,而不是一個列表,並HourConstraint.valueslist
爲正則表達式可以匹配該列表
我會去Collections.disjoint。我應該使用一組數據類型嗎?你也可以把我稱爲「可插拔運營商」嗎? – aitchnyu 2012-02-12 08:22:41
試試這個:http://blog.athico.com/2010/06/creating-pluggable-oprators.html。或複製並粘貼此課程以適應您的需求:https://github.com/droolsjbpm/drools/blob/master/drools-core/src/main/java/org/drools/base/evaluators/MatchesEvaluatorsDefinition.java – 2012-02-12 16:25:48