Drools - Проверьте, есть ли в wm несколько событий с разными свойствами

Мне нужен совет по написанию правила для Drools для проверки различных значений.

У меня есть событие как таковое:

public class Event {
    int propertyA;
    String propertyB;
}

и я хотел бы проверить, есть ли Eventв рабочей памяти, чтобы их propertyA значения одинаковы, но они имеют 4+ различных propertyB ценности.

Например: если Event был бы пользователем, и propertyA был бы его идентификатором и propertyB Цвет футболки, я хотел бы спросить: есть ли пользователь, который носил футболки с более чем или равными (>=) 4 разных цветов.

Как я могу реализовать это правило? Спасибо!

1 ответ

Решение

Найдите одно Событие с определенным А, а затем соберите набор B из всех событий с этим А.

$e: Event( $a: propertyA )   // $e ist the last of a group of As
not Event( this after $e, propertyA == $a ) 
accumulate( Event( propertyA == $a, $b: propertyB );
            $set: collectSet( $b );
            $set.size() >= 4 )
Другие вопросы по тегам