Drools 从对象 属性 收集列表

Drools collect list from object property

我有一个学生,他有课程列表。 我还有一个讲座,我需要检查学生课程列表和他访问的讲座课程列表是否相同

我为案例添加了规则,当学生访问讲座时,他在课程列表中没有:

    when
        $student:Student ($courses:courses) 
        LectureAssignment(student == $student, course not memberOf $courses)
    then
        scoreHolder.addHardConstraintMatch(kcontext, -1);

但我还需要检查,该学生访问了他在课程列表中的所有讲座

    $student:Student ($courses:courses)
    $rightCourses: collect (LectureAssignment(student == $student)) // and get courses list

在这里我得到了分配给当前学生的讲座,所有讲座都有 属性 课程,我需要将它们收集到列表 $rightCourses 中,之后 比较 $courses 和 $rightCourses(在这种情况下我认为我不需要第一条规则)

您可以使用 forall 运算符。请参阅此处的文档 [1]。如果这对你不起作用,你可以使用 accumulate [2],检查学生分配的讲座计数是否正确,结合你的第一条规则检查学生没有分配不属于部分的课程的课程列表。

[1] https://docs.jboss.org/drools/release/7.16.0.Final/drools-docs/html_single/index.html#_conditional_element_forall
[2] https://docs.jboss.org/drools/release/7.16.0.Final/drools-docs/html_single/index.html#_conditional_element_accumulate