2017-01-26 4 views
0

deklarieren Ich habe eine einfache Objektkonstruktion. Die Klasse ContextDroolsObject hat eine Eigenschaft des Typs Map mit der Bezeichnung objects. Innerhalb dieser Karte gibt es einen Schlüssel "imageThemes" mit einem ArrayList und dieser Regel hier nie übereinstimmt:Wie man eine Liste in Drools Regel

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 

ich auch mit List() mit dem gleichen Ergebnis ausprobiert habe.

¿Wie wird die Listendeklaration abgeglichen?

Antwort

1

Hallo Sie können Ihre Regel auf diese Weise umschreiben:

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

Die Verwendung einer hierarchischen Struktur für Faktobjekte ist häufig ein Konstruktionsfehler. Sie können möglicherweise nicht bequem über die Listenelemente entscheiden.

Wie auch immer, das ist die Möglichkeit, die Liste innerhalb der Map aus dem ContextDroolsObject zu extrahieren.

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

ich gerade versucht habe, es hat nicht funktioniert. Ich habe mich am ersten Tag über das Fehler-Design geäußert, weil ich vorher mit anderen Regel-Engines gearbeitet habe, aber ... da ist ein * schlauer * Typ als Architekt hier unten ... – eduyayo

Verwandte Themen