2016-08-10 1 views
-1

Ich habe eine Liste wie diese gebildet wird. Und ich bin immer die Listenelemente wie:hashmap aus einer Liste in Java holen

[ 
{Status=ok, ModuleID=40, Details=all ok, ModuleName=Job Posting, Attributes={amount=207,360.00, creatorName=Aditya, [email protected], ref=WIT0JP00000035, uom=USD, uniqueName=aditya_b, validObject=false, iconType=procurement, name=Checklist JP Cycle, refVersion=0, startDate=2015-02-01, createDate=2015-04-08, status=Pending Approval}, ID=z15040805190698260198983}, 
{Status=ok, ModuleID=70, Details=all ok, ModuleName=Time Sheet, Attributes={ref=WIT0TS00000460, uom=USD, amount=400.00, validObject=false, iconType=worker, name=Checkad1, Checkad1, refVersion=0, startDate=2015-03-30}, ID=z15040609520807147341983}, 
{Status=ok, ModuleID=430, Details=all ok, ModuleName=Expense Sheet, Attributes={ref=WIT0ES00000028, uom=USD, amount=50,000.00, validObject=false, iconType=worker, name=Checkad1, Checkad1, refVersion=0, startDate=2015-03-31}, ID=z15040609585357352848983}, 
{Status=ok, ModuleID=430, Details=all ok, ModuleName=Expense Sheet, Attributes={ref=WIT0ES00000030, uom=USD, amount=51,000.00, validObject=false, iconType=worker, name=serad1, serad1, refVersion=0, startDate=2015-04-03}, ID=z15040704105392986424983} 
] 

Jetzt möchte ich die ganze Liste durchlaufen und das „ref“ Wert aus dem Abschnitt Attribute aller Listen zu erhalten.

Wie kann ich das tun? Ich habe einen Code dafür geschrieben, aber wie ich in den Abschnitt "Attribute" gehe, bekomme ich nicht.

List<HashMap<String,String>> rt =downloadRes.path("PAYLOAD","ModuleID"); 

       int length=rt.size(); 
       System.out.println(rt); 

       for(int i=0;i<length;i++) 
       { 



       for(HashMap<String,String> entry:(rt)) 
       { 
       for(String key:entry.keySet()) 
       { 
        if(key.equalsIgnoreCase("Attributes")) 
        { 

        //what to write over here so that I can get the value of "ref" from that hashmap being created. 


        } 

        System.out.println(entry.get(key)); 

       } 

       } 
+0

Ihr Beispiel sieht aus wie JSON, nur ohne Anführungszeichen. Falls Sie diese für Ihr Beispiel einfach weggelassen haben ... und Sie haben tatsächlich mit JSON-Daten zu tun; dann sollte jede anständige JSON-Bibliothek das für Sie tun. – GhostCat

+0

Wenn Sie planen, die Listen in einer HashMap zu speichern, die von ModuleID codiert wird, funktioniert das nicht, da Sie doppelte Schlüssel haben. Abgesehen davon bin ich mir nicht sicher, was Sie erreichen möchten. – jr593

+0

@GhostCat: bitte ignorieren Sie das Problem von JSON, Betrachten Sie, wie ich gerade eine Liste habe und ich muss es durchqueren. Ich habe die Frage bearbeitet, bitte schauen Sie. –

Antwort

0

Dies ist keine empfohlene Methode zum Speichern der Daten, die Sie haben. Sie speichern den gesamten Wert "{ref = WIT ....}" als String für den Schlüssel 'Attribute'. Es wird ein zerbrechlicher Weg sein.

Aber vorausgesetzt, Sie möchten es als String speichern, müssen Sie das mit regulären Ausdruck analysieren, um den Wert oder 'ref' zurück zu bekommen.

Ein möglicher Ausdruck ist

(?<=ref=)(.*)(?=,[ ]*uom) 

Die Annahme, hier ist der Wert des ref durch ein Komma gefolgt wird, dann 0 oder mehr Leerzeichen und dann String uom.

Hier Code ist es zu testen ...

public static void main(String[] args){ 
     String toParse = "{ref=WIT0TS00000460, uom=USD, amount=400.00, validObject=false, iconType=worker, name=Checkad1, Checkad1, refVersion=0, startDate=2015-03-30}"; 
     Pattern p = Pattern.compile("(?<=ref=)(.*)(?=,[ ]*uom)"); 
     Matcher m = p.matcher(toParse); 
     if(m.find()){ 
     String group = m.group(1); 
     System.out.println(group); 
     } 

    } 
0
for(HashMap<String,Object> entry: rt) { 
        for(Entry<String, Object> key : entry.entrySet()) { 

           if(key.getKey().equalsIgnoreCase("Attributes")) 
            { 
             Map<String, String> attributes = (Map<String, String>) key.getValue(); 
             for(Entry<String, String> attri : attributes.entrySet()) 
             { 
             System.out.println(attri.getValue().toString()); 
             } 
            } 

           System.out.println(key.getValue()); 


         } 

        }