2016-07-27 20 views
-3

Wie ändere ich den Teil meines Codes wo ist eine For-Each-Schleife. Es sollteFor-Each-Schleife, Karte <String, Map <String, Liste <String> >>

wie diese Arbeit, wenn ich "Mark" im Fenster schreiben würde und in Ordnung klicken (neben Alina usw.), unten angezeigt werden soll:

[A] 

    [l] 
     - Alina 
    [d] 
     - Adam 
[M] 

    [a] 

     - Mark 

enter image description here

public class WordsList Arraylist erweitert {

@Override 
public String toString() { 
    if (isEmpty()) { 
     return "[]"; 
    } 
    return String.format("[%s]\n", stream().collect(Collectors.joining(",")));  
    } 
} 

Testklasse

private Map<String, Map<String, List<String>>> words = new HashMap<>(); 
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           

    String key = ("" + jTextField1.getText().charAt(0)).toUpperCase(); 
    Map<String, List<String>> firstLevel = words.get(key); 
    String value = jTextField1.getText(); 

    if (firstLevel == null) { 
     firstLevel = new HashMap<>(); 
     words.put(key, firstLevel); 
    } 

    List<String> secondLevel = firstLevel.get("" + jTextField1.getText().charAt(1)); 

    if (secondLevel == null) { 
     secondLevel = new ArrayList<>(); 
     firstLevel.put("" + jTextField1.getText().charAt(1), secondLevel); 
    } 

    secondLevel.add(value); 

    jTextArea1.setText(""); 

    for (String keys : words.keySet()) { 
     jTextArea1.append("[" + keys + "]\n");    
     for (String keyss : firstLevel.keySet()) { 
      jTextArea1.append("  " + "[" + keyss + "]\n");     
      for (String keysss : secondLevel) { 
       jTextArea1.append("   " + "-" + keysss + "\n"); 
      } 
     } 
    } 
}         

ich sehr Anfänger bin in Java auch, dies ist mein erster Beitrag ist

+3

* "Kann mir jemand helfen .." * ..du scheinst nach einem Tutor zu suchen, und das ist nicht der richtige Ort, um danach zu fragen. Wenn diese Impression falsch ist, posten Sie eine [mcve] und stellen Sie eine * spezifische * Frage. –

+0

Warum überschreiben Sie 'ArrayList's toString? Das ist so ziemlich die Standardimplementierung. –

+0

Dieser Code scheint zu funktionieren wie erwartet –

Antwort

2

Zum Beispiel, wenn ich Alina setzen, [A] seine Ordnung und [l] und Alina, dann habe ich Mark gesagt, ich overwrties [ l] an "a" und Alina an "Mark". Nur [A] wird bleiben und [M]

Der Fehler ist in der for-Schleifen:

for (String keys : words.keySet()) { 
    jTextArea1.append("[" + keys + "]\n");    
    for (String keyss : firstLevel.keySet()) { // <-- Here 
     jTextArea1.append("  " + "[" + keyss + "]\n");     
     for (String keysss : secondLevel) { // <-- Here 
      jTextArea1.append("   " + "-" + keysss + "\n"); 
     } 
    } 
} 

Anstatt iterieren firstLevel und secondLevel (die Sie gerade definiert haben), sollten Sie iterieren die über die Karte und eine Liste der entsprechenden Einträge:

(ich werde Map.forEach hier verwenden, da es etwas knapper ist)

words.forEach((c1, map) -> { 
    jTextArea1.append("[" + c1 + "]"); 

    map.forEach((c2, list) -> { 
     jTextArea1.append("  " + "[" + c2 + "]"); 

     list.forEach(name -> jTextArea1.append("   " + "-" + name)); 
    });   
}); 
+0

Vielen Dank für die Antwort. Ich habe deinen Code benutzt und das habe ich bekommen https://naforum.zapodaj.net/d8df4706f6ed.jpg.html. – mIeSo

+0

@mIeSo Es kann einen anderen Fehler geben, den ich nicht sehen kann. [So sieht es in meinem Testprogramm aus] (http://ideone.com/iELZel) (ganz unten). –

+0

Ich werde später meinen Code überprüfen und ich werde versuchen, dies herauszufinden. Ich werde dich wissen lassen – mIeSo

Verwandte Themen