2017-01-26 7 views
0

Eintrag, der mit der Liste vergleichen und den Wert von Map erhalten soll, der nicht dort ist, ist die Liste.Iterate Map in Java

for (Map.Entry<String, Object> entry : itemObj.entrySet()) 
    { 
     System.out.println(entry.getKey()); 
     for (ItemProcessVO processVO : itemDetails2){ 
      if (entry.getKey().equalsIgnoreCase(processVO.getAccount())){ 
       String account = processVO.getAccount(); 
       lstAccVO.add(account); 
      } 
     } 

    } 

Dies ist der Code i used.I haben Karte von entry.getKey haben() 6 Werte während itemDetail2 nur 5 elements.I nur nach einem Vergleich des fehlenden Konto müssen angezeigt werden muss.

+0

also müssen Sie nur die Schlüssel zurückgeben, die in der Karte sind, aber nicht in der Liste oder wollen Sie immer noch tun, was Sie oben tun? –

+0

@OP Ich habe eine andere Antwort hinzugefügt, lassen Sie mich wissen, wenn das hilft –

+0

Ja Michael Ritter Ich muss die Schlüssel zurückgeben sind in der Karte, aber nicht in der Liste. – user1669692

Antwort

0

Unten Code sollte den Trick tun. Es verwendet Groß- und Kleinschreibung Vergleich und Drucke Tasten am Ende bleiben, mehr Erklärung ist in den Kommentaren:

public static void main(String[] args) throws IOException { 
    Map<String, Object> itemObj = new HashMap<>(); //Your Map 
    List<ItemProcessVO> itemDetails2 = new ArrayList<>();// Your list 

    //First, get all the keys of the map 
    Set<String> keys = new HashSet<>(itemObj.keySet()); 

    //Now, iterate through list and remove the matching items 
    for(ItemProcessVO processVO : itemDetails2){ 
     String key = pop(keys, processVO.getAccount()); 
     //If key is not null then remove it 
     if(null != key){ 
      keys.remove(key); 
     } 
    } 

    //Now, iterate through remaining keys and print the values 
    for(String key : keys){ 
     System.out.println("Missing value " + itemObj.get(key)); 
    } 
} 

private static String pop(Set<String> set, String key){ 
    if(null == set){ 
     return null; 
    }else{ 
     for(String element : set){ 
      if(element.equalsIgnoreCase(key)){ 
       return element; 
      } 
     } 
    } 
} 
+0

Danke für die Lösung. Aber es hat nicht funktioniert . Ich habe ändere die Pop-Methode \t privaten static String pop (Set Set, String key) { \t \t if (null == set) { \t \t return null; \t \t \t} else { \t \t \t Iterator itr = set.iterator(); \t \t \t while (itr.hasNext()) { \t \t \t \t System.out.printin (itr.next()); \t \t \t \t Zeichenfolge next = itr.next(); \t \t if (next.equalsIgnoreCase (Schlüssel)) { \t \t zurück weiter; \t \t} \t \t \t \t } \t \t } \t \t Return-Taste; \t}. Die Zeichenfolge next = itr.next(); java.util.NoSuchElementException – user1669692

+0

Ich habe eine Änderung vorgenommen, versuche es jetzt? –

0

einfach eine else -Anweisung auf Ihre if-Klausel hinzufügen, die Geschäfte, die in einer lokalen Variablen berücksichtigen. Dann kannst du nach deinen for-Schleifen alles damit machen.

Hinweis: Sie können Schleife über Map#keySet() anstelle von Map#entrySet() verwenden und die Einträge auf diese Weise umgehen.

0

Im angegebenen Beispiel haben Sie den Schlüssel mit dem Konto verglichen. Verwenden Sie einfach die else- Anweisung, um die fehlendenAccounts zu finden, um nach dieser Schleife über sie zu iterieren.

List<ItemProcessVO> missingAccounts= new ArrayList<>(); 
for (Map.Entry<String, Object> entry : itemObj.entrySet()) 
{ 
    System.out.println(entry.getKey()); 
    for (ItemProcessVO processVO : itemDetails2){ 
     if (entry.getKey().equalsIgnoreCase(processVO.getAccount())){ 
      String account = processVO.getAccount(); 
      lstAccVO.add(account); 
     }else{ 
      missingAccounts.add(account) 
     } 
    } 
}