2017-05-23 4 views
0

Ich versuche, eine Liste der Karte iterieren, wie unten:Liste der Karten Iteration drools DRL

[ 
    { 
    "endOffset": 2913, 
    "coreference": "Tehran", 
    "entity": "a country", 
    "beginOffset": 2904 
    }, 
    { 
    "endOffset": 3055, 
    "coreference": "Bashar al-Assad", 
    "beginOffset": 3052 
    }, 
    { 
    "endOffset": 3130, 
    "coreference": "Bashar", 
    "beginOffset": 3128 
    } 
] 

Der Codeblock, ich bin Ausführung als unten:

PojoCorefList pojoCorefList=new PojoCorefList(); 
List<Map<String,String>> corefList=new ArrayList<Map<String,String>>(); 
Map<String,String> testMap=new LinkedHashMap<>(); 
testMap.put("beginOffset", "3052"); 
testMap.put("coreference", "Bashar al-Assad"); 
testMap.put("endOffset", "3055"); 
corefList.add(testMap); 
Map<String,String> testMap2=new LinkedHashMap<>(); 
testMap2.put("beginOffset", "3130"); 
testMap2.put("coreference", "Bashar"); 
testMap2.put("endOffset", "3128"); 
corefList.add(testMap2); 
Map<String,String> testMap3=new LinkedHashMap<>(); 
testMap3.put("beginOffset", "2913"); 
testMap3.put("coreference", "Tehran"); 
testMap3.put("endOffset", "2904"); 

corefList.add(testMap3); 

pojoCorefList.setCityPlaces(corefList); 
ksession.insert(pojoCorefList); 

Hier ist der PojoCorefList wie unten Klasse:

public static class PojoCorefList { 
    private List<Map<String,String>> cityPlaces; 
    public List<Map<String,String>> getCityPlaces() { 
     return cityPlaces; 
    } 

    public void setCityPlaces(List<Map<String,String>> cityPlaces) { 
     this.cityPlaces = cityPlaces; 
    } 
} 

Die TFL Syntax, habe ich versucht habe, ist wie folgt:

rule "List of Maps Testing" 
    salience 1 

    when 
     $c : PojoCorefList($coref : cityPlaces) 
    $item : List() from $coref 
    entry : Entry() from $item.entrySet() 
    //value: String() from entry.getValue() 
    //Boolean(booleanValue :true) from value=="Tehran" 

    then 
     System.out.println("List Maps Testing: list is - "+$item); 
end 

Ich glaube, ich $ HZVref Liste bin Iterieren und jetzt sollte ich eine Karte sein, die aber, wenn ich versuche entrySet() von $ Artikel zu bekommen, ich bin wie unten bekommen Ausnahme:

Unable to Analyse Expression $item.entrySet(): 
[Error: unable to resolve method using strict-mode: java.util.List.entrySet()] 
[Near : {... $item.entrySet() ....}] 
       ^: [Rule name='List of Maps Testing'] 

Antwort

0

geifert versteht keine Generika. Aber wenn Sie die richtigen Klassen angeben, sollte es funktionieren. Beachten Sie, dass from collection die Sammlung iteriert.

$c : PojoCorefList($coref : cityPlaces) 
    $m : HashMap() from $coref // cityPlaces are lists of Maps 
    entry : Entry() from $m.entrySet() 

oder verwenden

value : String() from $m.values() 

(Diese auf der geifert Version abhängen.)

+0

Danke laune. eine kleine Korrektur für Ihren Code $ m.entrySet() würde als Entry() zurückgeben. Eintrag: Entry() von $ m.entrySet() anstelle von String() – user3152549

+0

Ah, ja - ich dachte über die Werte der Karte nach. Fixed & danke. – laune

Verwandte Themen