在java中的链接哈希图中查找特定键的值[重复]

Posted

技术标签:

【中文标题】在java中的链接哈希图中查找特定键的值[重复]【英文标题】:Find a value for a specific key in a linked hashmap in java [duplicate] 【发布时间】:2020-01-14 12:25:51 【问题描述】:

有没有更简单的方法可以在 Java 的链接哈希映射中找到特定键的值?

HashMap<String, Object> newmap = (HashMap<String, Object>) entry.getValue();
String newType = "";
//finds out the primaryType for the new node
for (Entry<String, Object> mapentry : newmap.entrySet()) 
    if (mapentry.getKey() == "jcr:primaryType") 
        newType = (String) newmap.get("jcr:primaryType");
    

【问题讨论】:

就在您的代码中:newmap.get("jcr:primaryType")。其余的都是多余的。 除了newmap.get("jcr:primaryType"); 之外的所有内容在您发布的代码中都毫无意义。此外,您发布的内容也不起作用,因为您正在尝试使用 == 比较字符串 另外,您的代码会创建一个HashMap,而不是LinkedHashMap 【参考方案1】:

由于你的默认结果是"",你可以这样做

String newType = newmap.getOrDefault("jcr:primaryType", "");

【讨论】:

赞成,因为这保留了问题的原始行为,getOrDefault 很高兴知道。但在现实生活中,将其变为 null 可能更自然/更好。【参考方案2】:
LinkedHashMap<String , Object> newmap = (LinkedHashMap<String, Object>) entry.getValue();
String newType = (String) newmap.getOrDefault("jcr:primaryType", "");

【讨论】:

我可能会删除未经检查的演员表并使用Map&lt;?,?&gt; 最好在编译时声明数据类型,只要它们是静态的。 对未经检查的强制转换发出编译器警告不是一个好习惯。当Map 可以使用时,针对LinkedHashMap 进行编码并不是一个好习惯。 你说要删除未经检查的演员@Thilo是什么意思? Map newmap = (Map) entry.getValue();也给了我类型安全:从 Object 到 Map 的未经检查的强制转换 是的,你必须使用Map&lt;?,?&gt;。这是唯一安全的演员表。【参考方案3】:

如果我们谈论的是纯地图透视但在 JCR 或 Magnolia 中,上述所有答案都是正确的;你可以使用javax.jcr.Node#getProperty

要查询 Node 对象的特定属性,可以使用; javax.jcr.Node#hasProperty

【讨论】:

这是真的,但我正在使用 yaml load 从 yaml 文件中加载值,它会创建一个嵌套映射。 我理解@AnaSustic,那么地图操作就是这里的路。

以上是关于在java中的链接哈希图中查找特定键的值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

NodeJS通过键的值在数组中查找对象[重复]

在嵌套字典中查找特定键的值

在具有特定键的特定值的数组中查找对象的索引[重复]

哈希算法原理

DataWhale编程一

如何更改哈希映射中键的值? [复制]