私の要件はタグと一致させることです。この例では、この特定のHourConstraint
はHour(23)
に割り当てられたTeacherHour
をチェックします。(タグの)リストを他のタグと照合して共通要素の存在を検出する
具体的には、値["asst_ct","teacher_john_smith"]
ためTeacherHour.attributes["tags"]
をチェックしは、この場合("asst_ct"
と"teacher_john_smith"
両方)に少なくとも1個の一致二検出します。
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"]
質問:はどのように私は2つのリストの間共通の要素の(真または偽)の存在を検出するのですか?
DroolsエキスパートはmemberOf
とcontains
ですが、スカラーとコレクションをチェックします。コレクションと決してコレクションではありません。
私は2つの潜在的な方法を参照してください。
- は機能
boolean isIntersecting(list,list)
を導入し、真実は - をチェックするために一致させることができ、正規表現としてリストの代わりに文字列として
TeacherHour.attributes[]
とHourConstraint.valueslist
を実装することを使用するためにはDroolsを伝えますそのリスト
私はCollections.disjointに行きます。むしろ、私は設定されたデータ型を使うべきですか?また、私を「プラガブルオペレータ」と呼ぶことができますか? – aitchnyu
これを試してください: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 –