【问题标题】:How to iterate over a HashMap with a nested ArrayList inside如何使用嵌套的 ArrayList 遍历 HashMap
【发布时间】:2019-07-09 21:18:22
【问题描述】:

我目前正在地图中保存 JSON 响应,并且正在努力迭代嵌套的 HashMap 值。例如:

  • 索引 0
  • 索引 1 -> 键:“示例”:

    • 键:“示例 2”
    • 值“示例 3”(ArrayList)

      • 键、值... (HashMap)

我的地图是这样的:

HashMap<Object, Object> map = (HashMap< Object, Object >) result.getBody();

从以下 Spring Boot ResponseEntity 保存结果:

RestTemplate restTemplate = new RestTemplate();
ResponseEntity<Object> result = restTemplate.exchange(url, HttpMethod.GET,
    entity, Object.class);

并迭代我正在做的第一组索引:

 for (Map.Entry<Opportunities, Opportunities> entry : resultMap.entrySet()) {
    System.out.println(entry.getValue());
}

如何迭代索引 1 中的值?我已经尝试适应 this solution 但没有运气。 提前致谢。

编辑 - JSON 响应如下所示:

{
"metadata": {
    "page": 0,
    "pageSize": 1,
    "pageCount": 10,
    "totalCount": 10
},
"Users": [
    {
        "ID": 1216411,
        "name": "John",
        "name": "John",
        "Order_Details": {
            "id": 1216411234,
            "item": "Electric Razer",
            "region": {
                "name": "United States",
                "regionCode": "US"
            }
        },
        "Suppliers": [
        ...

【问题讨论】:

  • 你的地图的Object值是什么类型的结构? List、Set 等?
  • 您不应该使用 Maps 的索引,因为它们不保证任何顺序(尤其是 HashMap)。因此,您的问题看起来像XY problem。试着解释一下你真正想做什么,因为目前你可能走错了方向。
  • @WJS 它作为 LinkedHashMap 返回。 Pshemo 我从一个响应实体得到一个 JSON 响应,为了让我能够操作,我被建议将响应存储在 Object.class 中,然后使用 Map 来存储响应。谢谢
  • 如果您需要有关如何遍历它的帮助,请向我们展示 JSON。您的“格式化”示例无法解释。至少,我不知道该项目符号列表的 JSON / Map 是什么。
  • @Andreas 我添加了一个 JSON 示例,该示例是 Spring Boot 中的响应实体方法返回的 JSON。谢谢

标签: java for-loop


【解决方案1】:

所以假设你有这样的东西。

Map<String,LinkedHashMap<String,Long>> map =...
for (Map<String,Long> lhms : map.values()) {
    for (long value : lhms.values()) {
         System.out.println(value);
    }
}

【讨论】:

  • 感谢您的解决方案。不幸的是,我在转换用户类型时遇到了不兼容的类型。
  • 我唯一能想到的是,要么不是Users类型,要么是不同包中的Users类型。查看您的示例,似乎一切都是字符串。
  • 或者Java和对应的JSON之间根本没有映射关系。这就是为什么我建议Jackson
  • 是的,我相信我一开始可能有错误的方法,我能够使用 Jackson 将其转换为 JSON 字符串。谢谢你们的帮助
【解决方案2】:

WJS 对你提出的问题给出了很好的回答... ...但听起来你肯定想重新审视你的“设计”。

具体来说,您希望如何将 JSON 数据映射到 Java 对象?

正如 Pshemo 所说,HashMaps 非常适合快速查找给定键...但您无法按照创建列表的顺序轻松迭代列表。

还有一个问题是你想让你的“嵌套数据”有多“简单”或“复杂”。

所有这些都会影响创建、阅读和/或更新列表的难易程度。

强烈建议:考虑使用 Jackson:

https://www.baeldung.com/jackson-object-mapper-tutorial

【讨论】:

  • 感谢 Paul,我刚刚看了那个教程,我能够将对象转换为 JSON 字符串,我将在明天将其传递给 User 类。您是否知道将 JSON 字符串中的项目保存到 User.class 中不同变量的最佳方法?谢谢
猜你喜欢
  • 1970-01-01
  • 2015-02-13
  • 2011-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多