Слюни собирают список из свойства объекта - PullRequest
0 голосов
/ 14 января 2019

У меня есть студент, у которого есть список курсов. Также у меня есть лекции, и я должен проверить, что список курсов для студентов и список курсов лекций, которые он посещает, одинаковы

Я добавил правило для случая, когда студент посещает лекцию, которого у него нет в списке курсов:

    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 и после этого сравнить курсы $ и $ rightCourses (в этом случае я думаю, что мне не нужно первое правило)

1 Ответ

0 голосов
/ 15 января 2019

Вы можете использовать оператор 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

...