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

2022-09-01 04:52:49

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

private String dataToString(){
    Map data = (HashMap<MyClass.Key, String>) 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()ObjectObjectHashMapMyClass.KeyMyClass

当我在 中创建具有相同结构的 foreach 循环时,我没有遇到此问题。MyClass.java

我做错了什么?


答案 1

一种稍微更有效的方法:

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

如果可能的话,定义“getData”,这样你就不需要强制转换。


答案 2

改变:

Map data = (HashMap<MyClass.Key, String>) getData();

Map<MyClass.Key, String> data = (HashMap<MyClass.Key, String>) getData();

问题是返回的 if 数据只是一个 .一旦您将其设为通用,将返回 .甚至更好...迭代 ,这将是 一个 .它避免了额外的哈希查找。data.keySet()Collection<Object>MapkeySet()Collection<MyClass.Key>entrySet()Collection<MyClass.Key, String>