Ich bin sehr neu für die Android-Entwicklung und versuche, HashMap in einem Android-Beispielprojekt zu verwenden. Jetzt mache ich ein Beispielprojekt für Android lernen. Ich speichere nur Schlüssel und Werte in HashMap, ich möchte die Schlüssel und ihre Werte in EditView anzeigen. Ich habe in meinem Beispielprojekt den folgenden Code befolgt. Der erste Schlüssel und Wert wird jedoch nur in EditView gedruckt.
Map<String, String> map = new HashMap<String,String>();
map.put("iOS", "100");
map.put("Android", "101");
map.put("Java", "102");
map.put(".Net", "103");
Set keys = map.keySet();
for (Iterator i = keys.iterator(); i.hasNext(); ) {
String key = (String) i.next();
String value = (String) map.get(key);
textview.setText(key + " = " + value);
}
In EditView iOS = 100
wird nur gedruckt. Ich möchte alle Schlüssel und ihren Wert in EditText drucken. Kann mir bitte jemand sagen, wo ich falsch mache? Danke im Voraus.
Antworten:
Erstens gibt es Fehler in Ihrem Code, dh. In der for-Schleife fehlen ein Semikolon und eine schließende Klammer.
Wenn Sie dann versuchen, Werte an die Ansicht anzuhängen, sollten Sie textview.appendText () anstelle von .setText () verwenden.
Hier gibt es eine ähnliche Frage: Wie ändere ich Text in Android TextView?
quelle
for (Map.Entry<String,String> entry : map.entrySet()) { String key = entry.getKey(); String value = entry.getValue(); // do stuff }
quelle
Dies liegt daran, dass Ihre Textansicht bei jeder Iteration neuen Text erhält und der vorherige Wert weggeworfen wird. Verketten Sie Zeichenfolgen mit StringBuilder und legen Sie den TextView-Wert nach der Schleife fest. Sie können auch diese Art von Schleife verwenden:
for (Map.Entry<String, String> e : map.entrySet()) { //to get key e.getKey(); //and to get value e.getValue(); }
quelle
HashMap <Integer,Integer> hm = new HashMap<Integer,Integer>(); Set<Integer> keys = hm.keySet(); //get all keys for(Integer i: keys) { System.out.println(hm.get(i)); }
quelle
Mit Gson können Sie es einfacher machen:
Log.i(TAG, "SomeText: " + new Gson().toJson(yourMap));
Das Ergebnis sieht folgendermaßen aus:
I/YOURTAG: SomeText: {"key1":"value1","key2":"value2"}
quelle
Java 8
quelle
Mit Java 8:
map.keySet().forEach(key -> System.out.println(key + "->" + map.get(key)));
quelle
for (String entry : map.keySet()) { String value = map.get(entry); System.out.print(entry + "" + value + " "); // do stuff }
quelle
String text=""; for (Iterator i = keys.iterator(); i.hasNext() { String key = (String) i.next(); String value = (String) map.get(key); text+=key + " = " + value; } textview.setText(text);
quelle
Dieser Code ist getestet und funktioniert.
public void dumpMe(Map m) { dumpMe(m, ""); } private void dumpMe(Map m, String padding) { Set s = m.keySet(); java.util.Iterator ir = s.iterator(); while (ir.hasNext()) { String key = (String) ir.next(); Object value = m.get(key); if (value == null) continue; if (value instanceof Map) { System.out.println (padding + key + " = {"); dumpMe((Map)value, padding + " "); System.out.println(padding + "}"); } else if (value instanceof String || value instanceof Integer || value instanceof Double || value instanceof Float || value instanceof Long ) { System.out.println(padding + key + " = " + value.toString()); } else { System.out.println(padding + key + " = UNKNOWN OBJECT: " + value.toString()); // You could also throw an exception here } } // while } // dumpme
Charles.
quelle
Sie können diesen Code verwenden:
for (Object variableName: mapName.keySet()){ variableKey += variableName + "\n"; variableValue += mapName.get(variableName) + "\n"; } System.out.println(variableKey + variableValue);
Dieser Code stellt sicher, dass alle Schlüssel in einer Variablen gespeichert und dann gedruckt werden!
quelle
public void dumpMe(Map m) { dumpMe(m, ""); } private void dumpMe(Map m, String padding) { Set s = m.keySet(); java.util.Iterator ir = s.iterator(); while (ir.hasNext()) { String key = (String) ir.next(); AttributeValue value = (AttributeValue)m.get(key); if (value == null) continue; if (value.getM() != null) { System.out.println (padding + key + " = {"); dumpMe((Map)value, padding + " "); System.out.println(padding + "}"); } else if (value.getS() != null || value.getN() != null ) { System.out.println(padding + key + " = " + value.toString()); } else { System.out.println(padding + key + " = UNKNOWN OBJECT: " + value.toString()); // You could also throw an exception here } } // while } //This code worked for me.
quelle
Für alle, die darauf geklickt haben, um herauszufinden, was der Inhalt Ihrer HashMap ist, die
toString
Methode ( docs funktioniert ) tatsächlich mit den meisten Objekten. (Hinweis: Ein Java-Array ist kein Objekt!)Das ist also perfekt für Debugging-Zwecke:
quelle
Kotlin Antwort
for ((key, value) in map.entries) { // do something with `key` // so something with `value` }
Möglicherweise finden Sie andere Lösungen, die filterValues enthalten. Denken Sie daran, dass das Abrufen eines Schlüsselwerts mit filterValues geschweifte Klammern [] enthält.
quelle