如何在 Android 中打印 HashMap 中的所有键和值?

Posted

技术标签:

【中文标题】如何在 Android 中打印 HashMap 中的所有键和值?【英文标题】:How to print all key and values from HashMap in Android? 【发布时间】: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 中打印所有键及其值。谁能告诉我我做错了什么?提前致谢。

【问题讨论】:

查看这个问题和许多其他问题:***.com/questions/1066589/… 你好 Gopinath !您获取和设置哈希映射键值的代码是正确的,但您将这些值设置为只有一个 textView 。 谢谢大家。我得到了答案。再次感谢大家。 【参考方案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-example 和docs.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.

【讨论】:

请看How to Answer【参考方案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

【讨论】:

以上是关于如何在 Android 中打印 HashMap 中的所有键和值?的主要内容,如果未能解决你的问题,请参考以下文章

如何遍历 Hashmap、打印键/值并删除 Rust 中的值?

Android:- 如何在整个应用程序中使动态 HashMap 可访问? [复制]

如何将屏幕坐标插入hashmap android

如何在ListView中显示HashMap中的项目和子项目

如何使用 FileOutputStream 将 HashMap 分隔到单独的行中? [复制]

如何从 ArrayList<HashMap<String, String>> android 中获取所有元素