流口水从对象属性收集列表

时间:2019-01-14 13:30:38

标签: java drools optaplanner

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

我添加了案例规则,当学生参观讲座时,他不在课程列表中:

    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(在这种情况下,我认为我不需要第一条规则)

1 个答案:

答案 0 :(得分:1)

您可以使用forall运算符。请参阅此处的文档[1]。如果这对您不起作用,则可以使用累加[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