首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >迭代映射和列表的嵌套结构

迭代映射和列表的嵌套结构
EN

Stack Overflow用户
提问于 2019-01-21 14:14:35
回答 3查看 65关注 0票数 1

我有下面的HashMap map,包含ArrayList content,包含几个HashMaps

代码语言:javascript
运行
复制
{
   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

  1. 进入ArrayList

当我尝试

代码语言:javascript
运行
复制
for(int i=0; i<map.get("content").size(); i++){}

上面写着cannot find symbol,好像它不认识ArrayList

但是,将其转换为ArrayList工作:

代码语言:javascript
运行
复制
for(int i=0; i<((ArrayList)map.get("content")).size(); i++){}
  1. 进入HashMap

因此,在这个循环中,我尝试:

代码语言:javascript
运行
复制
// for(...){
   for(Map.Entry<Object, Object> obj : (((ArrayList)map.get("content")).get(i)){}
}

出现以下错误:

不适用于表达式类型的 必需:数组或java.lang.Iterable 发现对象:

铸造为HashMap:

代码语言:javascript
运行
复制
// for(...){
   for(Map.Entry<Object, Object> obj : ((HashMap)(ArrayList)map.get("content")).get(i)){}
}

产生该错误:

不兼容类型: ArrayList不能转换为HashMap

那么如何访问content的内容呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-21 14:20:07

您想要迭代Map的条目,所以应该调用entrySet

代码语言:javascript
运行
复制
for (Map.Entry<Object, Object> obj : ((HashMap)((ArrayList)map.get("content")).get(i)).entrySet() {}

为了提高它的可读性,我会将它分解成多个语句。我还会使用接口类型,而不是ArrayListHashMap

代码语言:javascript
运行
复制
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()) {

    }
}
票数 2
EN

Stack Overflow用户

发布于 2019-01-21 14:22:46

我将使用更多的代码来具有更多的人类可读的版本,并用接口替换具体的类(您不能确定反序列化器将创建一个ArrayList,而不是另一种List,与Map相同),具有以下代码:

代码语言:javascript
运行
复制
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  
  }  
}
票数 1
EN

Stack Overflow用户

发布于 2019-01-21 14:25:15

您必须遍历列表,这是值内容键。我想下面的代码就是你要找的东西。

代码语言:javascript
运行
复制
         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();
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54291810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档