我的要求是匹配标签。在示例中,此特定HourConstraint
检查TeacherHour
分配给Hour(23)
.
具体来说,它会检查TeacherHour.attributes["tags"]
值["asst_ct","teacher_john_smith"]
并检测至少一个 match,在这种情况下是两个 match (both "asst_ct"
and "teacher_john_smith"
)。
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"]
问题:如何检测两个列表之间是否存在共同元素(真或假)?
Drools Expert 有memberOf
and contains
,但他们检查标量与集合,从不检查集合与集合。
我看到了两种可能的方式:
- 引入一个函数
boolean isIntersecting(list,list)
并告诉 Drools 使用它来进行真实性检查 - 实现
TeacherHour.attributes[]
为字符串而不是列表,以及HourConstraint.valueslist
可以匹配该列表的正则表达式