如何在 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 可访问? [复制]