我有下面的HashMap map,包含ArrayList content,包含几个HashMaps
{
   key1=val1,
   key2=val2,
   // ...
   content=   [
      {
         keyAbc=val10,
         keyDef=val11,
         KeyGhi=val12,
      },
      {
         keyAbc=val13,
         keyDef=val14,
         KeyGhi=val15
      },
      {
         keyAbc=val16,
         keyDef=val17,
         KeyGhi=val18
      }
   ],
   key20=val20,
   // ...
}现在我需要得到所有的键和值content。
当我尝试
for(int i=0; i<map.get("content").size(); i++){}上面写着cannot find symbol,好像它不认识ArrayList。
但是,将其转换为ArrayList工作:
for(int i=0; i<((ArrayList)map.get("content")).size(); i++){}因此,在这个循环中,我尝试:
// for(...){
   for(Map.Entry<Object, Object> obj : (((ArrayList)map.get("content")).get(i)){}
}出现以下错误:
不适用于表达式类型的 必需:数组或java.lang.Iterable 发现对象:
铸造为HashMap:
// for(...){
   for(Map.Entry<Object, Object> obj : ((HashMap)(ArrayList)map.get("content")).get(i)){}
}产生该错误:
不兼容类型: ArrayList不能转换为HashMap
那么如何访问content的内容呢?
发布于 2019-01-21 14:20:07
您想要迭代Map的条目,所以应该调用entrySet
for (Map.Entry<Object, Object> obj : ((HashMap)((ArrayList)map.get("content")).get(i)).entrySet() {}为了提高它的可读性,我会将它分解成多个语句。我还会使用接口类型,而不是ArrayList和HashMap。
List list = (List) map.get("content");
for (int i = 0; i < list.size(); i++) {
    Map map = (Map) list.get(i);
    for (Map.Entry<Object,Object> entry : map.entrySet()) {
    }
}发布于 2019-01-21 14:22:46
我将使用更多的代码来具有更多的人类可读的版本,并用接口替换具体的类(您不能确定反序列化器将创建一个ArrayList,而不是另一种List,与Map相同),具有以下代码:
List content = (List) map.get("content");
for (Object item : content) {
  Map itemMap = (Map) item;
  for (Map.Entry entry : itemMap.entrySet()) {
     // Doing what you like with entry  
  }  
}发布于 2019-01-21 14:25:15
您必须遍历列表,这是值内容键。我想下面的代码就是你要找的东西。
         for (Map<Object, Object> listEntry : (List<Map<Object, Object>>) map.get("content")) {
        for (Map.Entry innerMapEtry : listEntry.entrySet()) {
            final Object key = innerMapEtry.getKey();
            final Object value = innerMapEtry.getValue();
        }
    }https://stackoverflow.com/questions/54291810
复制相似问题