Wie drucke ich alle Schlüssel und Werte von HashMap in Android?

70

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 = 100wird 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.

Gopinath
quelle
Siehe diese und viele andere Fragen: stackoverflow.com/questions/1066589/…
Anton
Hallo Gopinath !! Ihr Code zum Abrufen und Festlegen des Hash-Map-Schlüsselwerts ist korrekt, aber Sie setzen diesen Wert auf nur eine Textansicht.
Deepak Sharma
1
Dank an alle. Ich habe die Antwort bekommen. Nochmals danke ich Ihnen allen.
Gopinath

Antworten:

11

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?

Savino Sguera
quelle
2
Dies ist die beste Antwort, aber siehe auch @Shadow für die ordnungsgemäße Verwendung von Java 5 für und Map.Entry.
Dean Povey
184
for (Map.Entry<String,String> entry : map.entrySet()) {
  String key = entry.getKey();
  String value = entry.getValue();
  // do stuff
}
Schatten
quelle
12

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();
}
Muffinmad
quelle
11
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));
}
Abhi
quelle
Behebt nicht das eigentliche Problem mit dem Code des OP, der fast identisch ist.
user207421
11

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"}
Anh Vu
quelle
Hilfreich. Vielen Dank.
Pooja
5

Java 8

map.entrySet().forEach(System.out::println);
Bluehallu
quelle
5

Mit Java 8:

map.keySet().forEach(key -> System.out.println(key + "->" + map.get(key)));
mdev
quelle
1
Könnten Sie bitte eine Erklärung bearbeiten, warum dieser Code die Frage beantwortet? Nur-Code-Antworten werden nicht empfohlen , da sie die Lösung nicht vermitteln.
Nathan Tuggy
OP möchte alle Schlüssel- und Wertepaare drucken. Ich glaube nicht, dass hier eine Erklärung nötig ist. Es ist ein sehr alter Thread, der bereits beantwortet wurde, und auch keine Gehirnsache. Ich habe bereits geschrieben, wenn jemand nach einer Lösung in Java8 sucht, kann er / sie so etwas tun.
Mdev
1
mdev - Es gibt hier viele Neulinge, die von einer Erklärung profitieren würden, auch wenn es für einen Experten wie Sie offensichtlich ist. Wenn Sie eine Erklärung geliefert hätten, hätten Sie möglicherweise festgestellt, dass Ihre Lösung falsch ist. (Die Variable "Ergebnis" ist nicht angegeben). Es sollte sein: map.keySet (). ForEach (Schlüssel -> System.out.println (Schlüssel + "->" + map.get (Schlüssel))); Wobei -> die Parameter (links) von der Implementierung (rechts) trennt. Siehe howtodoinjava.com/java8/foreach-method-example und docs.oracle.com/javase/tutorial/java/javaOO/…
Tihamer
Tihamer Danke, dass du auf den Tippfehler hingewiesen hast. Ich habe die Antwort bearbeitet.
Mdev
Das OP möchte alle Schlüssel und Werte in einem Textfeld anzeigen , und sein einziges Problem besteht in diesem Teil davon.
user207421
3
    for (String entry : map.keySet()) {
      String value = map.get(entry);
      System.out.print(entry + "" + value + " ");
      // do stuff
    }
Sundresh
quelle
2
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);
jeet
quelle
1

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.

ChopperCharles
quelle
Vielen Dank, fügte dies zu meinen Utensilien
Moberme
0

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!

kakaday22
quelle
0
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.
Deepak Daniel
quelle
1
Bitte schauen Sie, wie man
antwortet
-1

Für alle, die darauf geklickt haben, um herauszufinden, was der Inhalt Ihrer HashMap ist, die toStringMethode ( docs funktioniert ) tatsächlich mit den meisten Objekten. (Hinweis: Ein Java-Array ist kein Objekt!)

Das ist also perfekt für Debugging-Zwecke:

System.out.println(myMap.toString());

>>> {key1=value1, key2=value2}
Petroni
quelle
-1

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.

val key = map.filterValues {it = position}.keys
portfoliobuilder
quelle