我有一个HashMap:
private HashMap<TypeKey,TypeValue > example= new HashMap<TypeKey, TypeValue>();
现在我想要浏览所有值并打印它们。
我写了这个:
for (TypeValue name: this.example.keySet()){
System.out.println(name);
}
它似乎不起作用。
有什么问题?
编辑: 另一个问题:这个集合是否基于零?我的意思是,如果它有1个键,值大小为0或1?
答案 0 :(得分:94)
keySet()只返回hashmap中的一组键,你应该迭代这个键集,并使用这些键从hashmap中获取值。
在您的示例中,hashmap键的类型为TypeKey
,但您在通用for循环中指定了TypeValue
,因此无法编译。你应该把它改成:
for (TypeKey name: example.keySet()){
String key = name.toString();
String value = example.get(name).toString();
System.out.println(key + " " + value);
}
如果您不需要打印键值并且只需要hashmap值,则可以使用其他人的建议。
另一个问题:这个集合 零基数?我的意思是它有一把钥匙 和值的大小是0还是1?
从keySet()
返回的集合是Set。您无法使用索引从集合中获取值,因此不是从零开始还是从一开始的问题。如果您的hashmap有一个键,则返回的keySet()将在其中包含一个条目,其大小将为1.
答案 1 :(得分:71)
查看键值对的简单方法:
Map<String, Integer> map = new HashMap<>();
map.put("a", 1);
map.put("b", 2);
System.out.println(Arrays.asList(map)); // method 1
System.out.println(Collections.singletonList(map)); // method 2
方法1和方法2都输出:
[{b=2, a=1}]
答案 2 :(得分:36)
假设你有Map<KeyType, ValueType>
,你可以这样打印:
for (Map.Entry<KeyType, ValueType> entry : map.entrySet()) {
System.out.println(entry.getKey()+" : "+entry.getValue());
}
答案 3 :(得分:13)
你有几个选择
map.values()
,获取值,而不是键map.entrySet()
keySet()
以及每次关键电话map.get(key)
答案 4 :(得分:13)
要打印键和值,请使用以下命令:
for (Object objectName : example.keySet()) {
System.out.println(objectName);
System.out.println(example.get(objectName));
}
答案 5 :(得分:9)
您想要设置值,而不是键集:
for (TypeValue name: this.example.values()) {
System.out.println(name);
}
你提供的代码甚至不会编译,这在将来的问题中值得一提 - “似乎不起作用”有点模糊!
答案 6 :(得分:7)
值得一提的是Java 8方法,使用BiConsumer
和lambda函数:
BiConsumer<TypeKey, TypeValue> consumer = (o1, o2) ->
System.out.println(o1 + ", " + o2);
example.forEach(consumer);
假设您已根据需要覆盖了这两种类型的toString
方法。
答案 7 :(得分:4)
我是使用String map完成的(如果你正在使用String Map)。
for (Object obj : dados.entrySet()) {
Map.Entry<String, String> entry = (Map.Entry) obj;
System.out.print("Key: " + entry.getKey());
System.out.println(", Value: " + entry.getValue());
}
答案 8 :(得分:3)
带有变量名的简单print语句包含哈希映射的引用:
HashMap<K,V> HM = new HashMap<>(); //empty
System.out.println(HM); //prints key value pairs enclosed in {}
这是有效的,因为toString()
方法已经被AbstractMap class
覆盖,HashMap Class
由HTTPClient
扩展
来自文档的更多信息
返回此地图的字符串表示形式。字符串表示由地图的entrySet视图的迭代器返回的顺序中的键 - 值映射列表组成,括在大括号(“{}”)中。相邻的映射由字符“,”(逗号和空格)分隔。每个键值映射都呈现为键,后跟等号(“=”),后跟相关值。通过String.valueOf(Object)将键和值转换为字符串。
答案 9 :(得分:2)
Java 8新功能forEach
样式
import java.util.HashMap;
public class PrintMap {
public static void main(String[] args) {
HashMap<String, Integer> example = new HashMap<>();
example.put("a", 1);
example.put("b", 2);
example.put("c", 3);
example.put("d", 5);
example.forEach((key, value) -> System.out.println(key + " : " + value));
// Output:
// a : 1
// b : 2
// c : 3
// d : 5
}
}
答案 10 :(得分:2)
对于我来说,这一行很有效:
Arrays.toString(map.entrySet().toArray())
答案 11 :(得分:1)
如果地图将集合作为值保存,则其他答案需要额外的努力才能将它们转换为字符串,例如Arrays.deepToString(value.toArray())
(如果是列表值的映射)等。
我经常遇到这些问题,并遇到了使用ObjectMappers
打印所有对象的通用函数。这在所有地方都非常方便,特别是在试验过程中,我建议你选择这种方式。
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
public static String convertObjectAsString(Object object) {
String s = "";
ObjectMapper om = new ObjectMapper();
try {
om.enable(SerializationFeature.INDENT_OUTPUT);
s = om.writeValueAsString(object);
} catch (Exception e) {
log.error("error converting object to string - " + e);
}
return s;
}
答案 12 :(得分:0)
您可以使用Entry
课程轻松阅读HashMap
。
for(Map.Entry<TypeKey, TypeKey> temp : example.entrySet()){
System.out.println(temp.getValue()); // Or something as per temp defination. can be used
}
答案 13 :(得分:0)
用于快速打印HashMap中的条目
System.out.println(Arrays.toString(map.entrySet().toArray()));
答案 14 :(得分:0)
map.forEach((key, value) -> System.out.println(key + " " + value));
使用Java 8功能