2017-01-26 18 views
0

У меня есть простая конструкция объекта. Класс ContextDroolsObject имеет свойство типа Map под названием objects. Внутри этой карты нет ключа "imageThemes" с ArrayList и это правило здесь никогда не совпадает:Как объявить список в правиле Drools

import java.util.ArrayList; 
import java.util.Map; 
import com.my.ContextDroolsObject; 

dialect 'java' 


rule 'Soccer Image Theme' 
    salience 100 
    when 
     s : ContextDroolsObject() 
     objectsm : Map() from s.objects 
     imageThemesList : ArrayList() from outputsm.imageThemes 
    then 
System.out.println("-----------------------soccer"); 
    end 

Я также попытался с List() с тем же результатом.

¿Как соответствовать декларации списка?

ответ

1

Привет вы можете переписать правила таким образом:

import java.util.ArrayList; 
import java.util.Map; 
import com.my.ContextDroolsObject; 

dialect 'java' 


rule 'Soccer Image Theme' 
salience 100 
when 
    s : ContextDroolsObject(imageThemesList : objects#Map.get("imageThemes")) 
then 
    System.out.println("-----------------------soccer"); 
end 
0

Использование иерархической структуры для объектов фактов часто является дефектом дизайна. Возможно, вы не сможете легко рассуждать над элементами списка.

В любом случае, это способ извлечь список из карты из ContextDroolsObject.

rule 'Soccer Image Theme' 
    salience 100 
when 
    s: ContextDroolsObject() 
    imageThemesList: ArrayList() from s.getObjects().get("imageThemes") 
then 
    System.out.println("-----------------------soccer"); 
end 
+0

Я просто попытался, это не сработало. Я прокомментировал дизайн дефекта в первый день, когда нашел это, потому что раньше работал с другими механизмами правил, но ... здесь есть более умный парень в качестве архитектора ... – eduyayo