Получение последнего события, удовлетворяющего условию

Есть ли способ получить последнее событие, удовлетворяющее определенному предикату?

Например, если я напишу это правило:

rule 1:
  when
    myObject: MyObject(id == "id1" && name == "name1" && type == "type1")
  then
    myObject.doSomething();

Я хочу, чтобы правило запускалось только в том случае, если объект MyObject, вставленный последним с идентификатором "id1", имеет заданное имя и тип. Обратите внимание, что одновременно может быть несколько MyObject с этим идентификатором.

По сути, я хочу сделать что-то вроде этого:

rule 1:
  when
    myObject: (Get the latest MyObject with its id == "id1") and
    ( myObject.name == "name1" && myObject.type == "type1") )
  then
    myObject.doSomething();

Я использую Drools 6.2.0.


person Anmol Singh Jaggi    schedule 10.11.2016    source источник


Ответы (1)


Предполагая, что у вас есть события, которые требуют

declare MyObject
  @role( event )
end

вы можете написать это правило:

rule "latest id1-name1-type1"
when
  myObj: MyObject( id == "id1", name == "name1", type == "type1" )
  not MyObject( this after myObj, id == "id1" )
then
   myObj.doSomething();
end
person laune    schedule 10.11.2016
comment
Я внес некоторые изменения в ответ, чтобы он точно отражал то, что я хотел. - person Anmol Singh Jaggi; 10.11.2016