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

我是 Android 开发的新手,我正在尝试在 Android 示例项目中使用 HashMap。现在,我正在做学习机器人的示例项目。我只是在 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);
}

在编辑视图中,iOS = 100只是打印。我要在 EditText 中打印所有键及其值。有人能告诉我哪里做错了吗?先谢谢你。

250339 次浏览

首先,代码中有错误。在 for 循环中缺少一个分号和一个括号。

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

这里也有一个类似的问题: 如何在 Android TextView 中更改文本

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

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

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

这段代码经过了测试并能正常工作。

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

查尔斯。

你可以使用以下代码:

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

这段代码将确保所有的键都存储在一个变量中,然后打印出来!

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

使用 Java8:

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

爪哇8

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

你可以和格森一起更轻松一些:

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

结果会是这样的:

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

对于每一个点击它来找出 HashMap 的内容的人来说,toString方法(医生)实际上可以处理大多数对象。(注意: java 数组不是对象!)

因此,对于调试目的来说,这种方法完全可行:

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


>>> {key1=value1, key2=value2}
    for (String entry : map.keySet()) {
String value = map.get(entry);
System.out.print(entry + "" + value + " ");
// do stuff
}

Kotlin 答案

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

您可以找到包含 filterValue 的其他解决方案。请记住,使用 filterValue 检索 Key 值将包括括括号[]。

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

打印所有键:

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

打印所有条目:

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