【问题标题】:How to print all key and values from HashMap in Android?如何在 Android 中打印 HashMap 中的所有键和值?
【发布时间】:2012-02-13 03:40:39
【问题描述】:

我对 Android 开发非常陌生,我正在尝试在 Android 示例项目中使用 HashMap。现在,我正在做学习 android 的示例项目。我只是在 HashMap 中存储键和值,我想在 EditView 中显示键和它们的值。我在示例项目中遵循以下代码。但是,第一个键和值仅在 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);
   }

在 EditView 中 iOS = 100 仅打印。我想在 EditText 中打印所有键及其值。谁能告诉我我做错了什么?提前致谢。

【问题讨论】:

  • 查看这个问题和许多其他问题:stackoverflow.com/questions/1066589/…
  • 你好 Gopinath !您获取和设置哈希映射键值的代码是正确的,但您将这些值设置为只有一个 textView 。
  • 谢谢大家。我得到了答案。再次感谢大家。

标签: java android key hashmap


【解决方案1】:
for (Map.Entry<String,String> entry : map.entrySet()) {
  String key = entry.getKey();
  String value = entry.getValue();
  // do stuff
}

【讨论】:

    【解决方案2】:

    这是因为您的 TextView 在每次迭代时都会收到新的文本,而 previuos 值会被丢弃。通过 StringBuilder 连接字符串并在循环后设置 TextView 值。 您也可以使用这种类型的循环:

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

    【讨论】:

      【解决方案3】:

      您可以使用 Gson 更轻松地做到这一点:

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

      结果将如下所示:

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

      【讨论】:

      • 很有帮助。非常感谢。
      【解决方案4】:

      首先,您的代码中有错误,即。您在 for 循环中缺少分号和右括号。

      然后,如果您尝试将值附加到视图,您应该使用 textview.appendText(),而不是 .setText()。

      这里有一个类似的问题:how to change text in Android TextView

      【讨论】:

      • 这是最好的答案,但另请参阅@Shadow,了解如何正确使用 Java 5 和 Map.Entry。
      【解决方案5】:
      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));
      }
      

      【讨论】:

      • 没有解决 OP 代码的实际问题,几乎相同。
      【解决方案6】:

      Java 8

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

      【讨论】:

        【解决方案7】:

        使用 Java 8:

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

        【讨论】:

        • 能否请您 edit 解释为什么这段代码回答了这个问题?纯代码答案是 discouraged,因为它们不教授解决方案。
        • OP 想要打印所有的键和值对。我认为这里不需要任何解释。这是一个非常古老的线程,已经回答了,也没有大脑的东西。我已经写过如果有人正在寻找 Java8 中的解决方案,他/她可以做类似的事情。
        • mdev - 这里有很多新手会从解释中受益,即使对于像您这样的专家来说是显而易见的。如果您提供了解释,您可能会发现您的解决方案不正确; (未指定“结果”变量)。应该是:map.keySet().forEach(key -> System.out.println(key + "->" + map.get(key))); -> 将参数(左侧)与实现(右侧)分开。见howtodoinjava.com/java8/foreach-method-exampledocs.oracle.com/javase/tutorial/java/javaOO/…
        • Tihamer 感谢您指出错字。我已经编辑了答案。
        • OP 想要 显示 文本字段中的所有键和值,而他唯一的问题在于它的那一部分。
        【解决方案8】:
            for (String entry : map.keySet()) {
              String value = map.get(entry);
              System.out.print(entry + "" + value + " ");
              // do stuff
            }
        

        【讨论】:

          【解决方案9】:
          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);
          

          【讨论】:

            【解决方案10】:

            此代码已经过测试并且可以运行。

            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
            

            查尔斯。

            【讨论】:

            • 谢谢,已将其添加到我的实用工具中
            【解决方案11】:

            您可以使用此代码:

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

            此代码将确保所有键都存储在变量中,然后打印!

            【讨论】:

              【解决方案12】:
              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.
              

              【讨论】:

              【解决方案13】:

              打印所有键:

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

              打印所有条目:

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

              【讨论】:

                【解决方案14】:

                对于单击此以了解 HashMap 内容是什么的每个人,toString 方法 (docs) 实际上适用于大多数对象。 (注意:java 数组不是对象!)

                所以这对于调试目的来说非常好:

                System.out.println(myMap.toString());
                
                >>> {key1=value1, key2=value2}
                

                【讨论】:

                  【解决方案15】:

                  Kotlin 答案

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

                  您可能会找到包含 filterValues 的其他解决方案。请记住,使用 filterValues 检索键值将包括大括号 []。

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

                  【讨论】:

                    猜你喜欢
                    • 2013-07-25
                    • 1970-01-01
                    • 2022-01-09
                    • 1970-01-01
                    • 2019-11-28
                    • 1970-01-01
                    • 2018-04-23
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多