【问题标题】:Printing a java map Map<String, Object> - How? [duplicate]打印 java 地图 Map<String, Object> - 如何? [复制]
【发布时间】:2016-08-15 09:36:26
【问题描述】:

如何从以对象为值的地图中打印信息?

我创建了以下地图:

Map<String, Object> objectSet = new HashMap<>();

对象有自己的类和自己的实例变量

我已经用数据填充了上面的地图。

我创建了一个printMap 方法,但我似乎只能打印地图的键

如何让地图使用 for each 循环打印 &lt;Object&gt; 值?

到目前为止,我有:

for (String keys : objectSet.keySet())
{
   System.out.println(keys);
}

上面打印出密钥。我也希望能够打印出对象变量。

【问题讨论】:

  • Map 是否只有keySet 方法?没有其他方法吗?
  • 你刚刚试过println(map)吗?

标签: java hashmap


【解决方案1】:

我确信已经有一些不错的库可以为你做这种事情......但要坚持你已经使用的方法,Map#entrySet 给你一个组合 Object 和 @ 987654323@ value。所以像:

for (Map.Entry<String, Object> entry : map.entrySet()) {
    System.out.println(entry.getKey() + ":" + entry.getValue().toString());
}

会做你想做的事。


如果您使用的是 java 8,还有新的流式处理方法。

map.forEach((key, value) -> System.out.println(key + ":" + value));

【讨论】:

  • 从 J8 链接了 lambda 函数
  • 这个答案应该被接受。糟糕的礼仪!感谢发帖。
【解决方案2】:

HashMap中有一个get方法:

for (String keys : objectSet.keySet())  
{
   System.out.println(keys + ":"+ objectSet.get(keys));
}

【讨论】:

  • 在对时间敏感的应用程序使用这种方法时要小心,因为对应值的内部 get 方法是 linearly searching O(n)
  • get 方法在内部调用了使用散列的 getNode(hash(key), key)。仅当存在哈希冲突时才进行线性搜索。
【解决方案3】:

你可以使用Map.entrySet()方法:

for (Map.Entry entry : objectSet.entrySet())
{
    System.out.println("key: " + entry.getKey() + "; value: " + entry.getValue());
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-14
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    • 2020-01-26
    • 2020-07-14
    • 1970-01-01
    相关资源
    最近更新 更多