当前位置:  开发笔记 > 编程语言 > 正文

如何在Java中使用foreach循环来遍历HashMap中的值?

如何解决《如何在Java中使用foreach循环来遍历HashMap中的值?》经验,为你挑选了3个好方法。

我正在尝试编译以下代码:

private String dataToString(){
    Map data = (HashMap) getData();
    String toString = "";
    for( MyClass.Key key: data.keySet() ){
        toString += key.toString() + ": " + data.get( key );
    return toString;
}

我在for行中遇到错误:

incompatible types
found : java.lang.Object
required: MyClass.Key

getData()方法返回一个Object(但在这种情况下Object返回的HashMap结构). MyClass.Key是我为我的应用程序创建的枚举(在另一个类文件中MyClass).

当我创建一个具有相同结构的foreach循环时MyClass.java,我没有遇到这个问题.

我究竟做错了什么?



1> Paul Tomblin..:

一种稍微有效的方法:

  Map data = (HashMap) getData(); 
  StringBuffer sb = new StringBuffer();
  for (Map.Entry entry : data.entrySet()) {
       sb.append(entry.getKey());
       sb.append(": ");
       sb.append(entry.getValue());
   }
   return sb.toString();

如果可能的话,定义"getData",这样你就不需要演员了.



2> Craig P. Mot..:

更改:

Map data = (HashMap) getData();

Map data = (HashMap) getData();

问题是,如果数据只是a ,则data.keySet()返回Collectiona Map.一旦你使它通用,keySet()将返回一个Collection.甚至更好......迭代entrySet(),这将是一个Collection.它避免了额外的哈希查找.


@cletus,是的,但这不是问题.

3> dialex..:

我在java论坛上找到了这个简单的例子.它的语法与List的foreach非常相似,这正是我所寻求的.

import java.util.Map.Entry;
HashMap nameAndAges = new HashMap();
for (Entry entry : nameAndAges.entrySet()) {
        System.out.println("Name : " + entry.getKey() + " age " + entry.getValue());
}

[编辑:]我测试了它,它完美地工作.

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有