【问题标题】:How to Get data from nested LinkedHashMap如何从嵌套的 LinkedHashMap 中获取数据
【发布时间】:2021-11-22 21:18:54
【问题描述】:

如何从这个linkedHashMap中获取“测试”数据

Map<String, Object> response = new LinkedHashMap<String, Object>() {{
    put("data", new LinkedHashMap<String, Object>() {{
        put("images", new LinkedHashMap<String, Object>() {{
            put("original", new LinkedHashMap<String, Object>() {{
                put("url", "test");
            }});
        }});
    }});
}};

response.get("url") = null

response.get("data.images.original.url") = null

response.get("data").get("images").get("original").get("url")

Compilation failed:
cannot find symbol
symbol:   method get(java.lang.String)
location: class java.lang.Object

toString();

结果{data={images={original={url=test}}}};

【问题讨论】:

    标签: java hashmap linkedhashmap


    【解决方案1】:

    “正确”的方式是

    Object url = ((Map<String,Object>) ((Map<String,Object>) ((Map<String,Object>) response.get("data")).get("images")).get("original")).get("url");
    

    是的,这很丑陋。主要是因为您选择的类型。

    通过使您的地图价值Object,您在输入内容方面获得了灵活性,但您将负担放在地图的“读者”身上,以便实际投射到他们想要的任何内容。并且由于涉及到泛型,所有这些类型转换都是未经检查的(即运行时可以检查返回的对象实际上是Map,但它无法验证它们是否真的是Map&lt;String, Object&gt;

    此外,您还使用double brace initialization,我强烈反对,因为它是一个丑陋的黑客。如果您使用的是 Java 9 或更高版本,则只需使用 Map.of() 代替:

    Map<String, Object> response = Map.of(
        "data", Map.of(
            "images", Map.of(
                "original", Map.of(
                    "url", "test"
                )
            )
        )
    );
    

    这里的缩进只是为了可视化这些调用的结构,绝对没有必要。

    【讨论】:

    • 非常感谢您的建议和回复
    猜你喜欢
    • 2018-05-02
    • 2022-11-26
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    相关资源
    最近更新 更多