2016-07-13 9 views
0

Ich habe eine Java-Klasse, wie untenWie zu vergleichen und genaue Sammlung in Java und Drools?

public class Ball 
{ 
    private int size; 
    private String brand; 
    private ArrayList<String> colour; 
    private HashMap<String, String> price; 

    //getter and setters 

} 

Ich möchte Drools Regel (Java-Dialekt) erstellen, die Größe, Marke und Farbe und legen Preis Karte entsprechend zu lesen.

Farbe ArrayList sollte genau übereinstimmen, z. Wenn ein Ball hat Rot, Schwarz & Blau Farbe zusammen, dann sollte eine bestimmte Regel gelten.

Preisübersicht z.B. [{"USA", "1.79"}, {"UK", "1.48"}, {"UAE", "11.37"}]. Verwechsle das nicht mit json, es ist eine Java HashMap.

rule "rule 1" 
when 
ball : Ball 
(
size == 14, 
brand == "NIVIA", 
colour == //here i want to compare exact match of the arraylist. 
) 
then 
ball.setPrice(//here i want to set price map); 
end 

Bitte helfen, die .drl Datei

+0

@Taegost: Es gibt keine Frage von dem, was ich versucht habe, ich weiß nicht, wie man Ansammlungen in der Regelakte benutzt. Ich stelle diese Frage, als ich versuchte, eine Lösung im Internet zu finden, konnte aber keinen ähnlichen Zustand finden wie meinen. –

Antwort

0

Zunächst einmal zu schaffen, sollten wir die Verwendung eines List<String> Frage für eine Reihe von Farben zu halten. Ist die Reihenfolge wirklich wichtig? Es ist möglich, dass Sie einen roten Ball mit grünen und blauen Punkten von einem weißen Ball mit violetten Streifen unterscheiden wollen, aber trotzdem kann "Ordnung" alleine nicht alle Feinheiten ausdrücken. Punkt ist, List.equals (und auch == in Drools) ist definiert, um wahr zurückzugeben, wenn und nur wenn Elemente gleich sind, eins nach dem anderen. Das gleiche Problem tritt auf, wenn Sie String[] verwenden und Arrays.equals() anrufen.

Ich denke, die beste Lösung eine

private Set<String> colour; 

und schreiben die Regel als

rule "rule 1" 
when 
    ball: Ball(size == 14, brand == "NIVIA", 
       colour == new HashSet(Arrays.asList("Red", "Black", "Blue"))) 
then 
    ball.setPrice(...); 
end 

Ihre Java-Anwendung eine Kugel-Methode zu verwenden wäre vielleicht bieten:

public boolean hasColours(String... colours) 

die würde die Notation in der Regel vereinfachen:

ball: Ball(size == 14, brand == "NIVIA", 
       ball.hasColours("Red", "Black", "Blue")) 
+0

Es hat funktioniert !! Vielen Dank –

Verwandte Themen