2012-08-12 2 views
0

Comment puis-je vérifier via le langage de règles Drools (DRL) si un objet fait également partie d'une liste?Règle pour vérifier si l'objet est dans la liste

Jetons un coup d'œil à l'exemple d'examen. Image la situation qu'un examen a une salle et aussi une liste. Maintenant, je veux vérifier, si l'objet Room est dans la liste. Y at-il une fonction comme roomList.contains (rooms)?

J'en ai besoin pour le DRL.

Merci

Répondre

1

Si vous êtes par hasard prendre au sujet de la Liste du cadre de collection en java ... alors oui nous avons une méthode appelée frequency().

List<String> l = new ArrayList<String>(); 

Collections.frequency(l, "room1"); 
+0

Je ne sais pas si cela répond à la question, mais c'est bon à savoir! – MadProgrammer

+0

Mais ce n'est pas un moyen de vérifier DRL (Drools Rule Language). – Vivid

2

Pour un modèle comme celui-ci:

class Exam { 
    Room room; 
... 
} 
class Room { 
    List<Room> roomsList; 
... 
} 

Ensuite, votre règle pourrait ressembler à:

rule X 
when 
    $exam1 : Exam() 
    $exam2 : Exam(room.roomsList contains $exam1.room) 
then 
    // do something 
end 

Vous pouvez également utiliser l'opérateur « memberOf » pour vérifier si un élément est membre de une liste, ou appelez simplement les méthodes directement si vous utilisez Drools 5.4+.

0

J'ai la situation suivante

class Exam { 
    Room room; 
    ... 
} 
class Room { 
    List<Room> roomList 
    ... 
} 

Mon DRL-Files ressemble à ceci:

rule "containsRoomOfRoom" 
when 
    $topicConflict : TopicConflict($leftTopic : leftTopic, $rightTopic : rightTopic) 
    $leftExam : Exam(topic == $leftTopic, $period : period, $leftRoom : room) 
    $rightExam : Exam(topic == $rightTopic, period == $period, room.roomsList contains $leftRoom) 
then 
    insertLogical(new IntConstraintOccurrence("roomPenalty", ConstraintType.NEGATIVE_HARD, 
      40, 
      $leftExam, $rightExam)); 

fin

Mon problème est que je veux vérifier si la chambre du leftExam est dans la chambreListe de la chambre de l'examen de droite.

Désolé pour cette question mais je ne trouve aucune référence de langue.

+1

Vous devriez avoir ajouté cette information à votre question originale, ne pas l'ajouter comme une réponse à la question. J'ai édité ma réponse précédente pour vous donner un exemple semblable à ceci. –

+0

J'ai changé le fichier DRL en question ci-dessus! Je reçois cette erreur: java.lang.RuntimeException: impossible d'invoquer getter: getRoom [declr.class: domain.Exam; act.class: domain.Exam] (voir trace) Causé par: java.lang.RuntimeException: impossible d'invoquer la méthode: domain.Room.getRoomslist: la cible de la méthode est nulle – Vivid

+0

Le problème semble être la room.roomsList. Parfois, la roomList est vide. Mais cela ne devrait jamais être nul. Peut-être que les baves ne peuvent pas accéder à la liste des chambres. – Vivid

Questions connexes