Gopinath
Gopinath

Reputation: 5442

How to print all key and values from HashMap in Android?

I am trying to use HashMap in Android sample project. Now, am doing sample project for learn android. I just store keys and values in HashMap, i want to show the keys and their values in EditView. I followed below code in my sample project. But, first key and value only printing in EditView.

   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 is only printing. I want to print all keys and their value in EditText. What am I doing wrong?

Upvotes: 74

Views: 254673

Answers (15)

Al&#233;cio Carvalho
Al&#233;cio Carvalho

Reputation: 13657

To print all keys:

myMap.keys().toList().joinToString()

To print all entries:

myMap.map { "${it.key} :: ${it.value}" }.toList().joinToString()

Upvotes: 1

mdev
mdev

Reputation: 1416

With Java 8:

map.keySet().forEach(key -> System.out.println(key + "->" + map.get(key)));

Upvotes: 5

portfoliobuilder
portfoliobuilder

Reputation: 7856

Kotlin Answer

for ((key, value) in map.entries) {
    // do something with `key`
    // so something with `value`
}

You may find other solutions that include filterValues. Just keep in mind that retrieving a Key value using filterValues will include braces [].

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

Upvotes: -1

Sundresh
Sundresh

Reputation: 185

    for (String entry : map.keySet()) {
      String value = map.get(entry);
      System.out.print(entry + "" + value + " ");
      // do stuff
    }

Upvotes: 4

petroni
petroni

Reputation: 776

For everyone who clicked on this to find out what the content of your HashMap is, the toString method (docs) actually works with most objects. (note: a java array is not an object!)

So this woks perfectly fine for debugging purposes:

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

>>> {key1=value1, key2=value2}

Upvotes: -1

Savino Sguera
Savino Sguera

Reputation: 3572

First, there are errors in your code, ie. you are missing a semicolon and a closing parenthesis in the for loop.

Then, if you are trying to append values to the view, you should use textview.appendText(), instead of .setText().

There's a similar question here: how to change text in Android TextView

Upvotes: 12

Anh Vu
Anh Vu

Reputation: 229

You can do it easier with Gson:

Log.i(TAG, "SomeText: " + new Gson().toJson(yourMap));

The result will look like:

I/YOURTAG: SomeText: {"key1":"value1","key2":"value2"}

Upvotes: 14

bluehallu
bluehallu

Reputation: 10285

Java 8

map.entrySet().forEach(System.out::println);

Upvotes: 5

Deepak Daniel
Deepak Daniel

Reputation: 102

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.

Upvotes: 0

Abhi
Abhi

Reputation: 119

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));
}

Upvotes: 11

kakaday22
kakaday22

Reputation: 167

you can use this code:

for (Object variableName: mapName.keySet()){
    variableKey += variableName + "\n";
    variableValue += mapName.get(variableName) + "\n";
}
System.out.println(variableKey + variableValue);

this code will make sure that all the keys are stored in a variable and then printed!

Upvotes: 0

ChopperCharles
ChopperCharles

Reputation: 787

This code is tested and working.

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.

Upvotes: 1

muffinmad
muffinmad

Reputation: 641

It's because your TextView recieve new text on every iteration and previuos value thrown away. Concatenate strings by StringBuilder and set TextView value after loop. Also you can use this type of loop:

for (Map.Entry<String, String> e : map.entrySet()) {
    //to get key
    e.getKey();
    //and to get value
    e.getValue();
}

Upvotes: 12

jeet
jeet

Reputation: 29199

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);

Upvotes: 2

Shadow
Shadow

Reputation: 6277

for (Map.Entry<String,String> entry : map.entrySet()) {
  String key = entry.getKey();
  String value = entry.getValue();
  // do stuff
}

Upvotes: 191

Related Questions