在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<?,?>
最好在编译时声明数据类型,只要它们是静态的。
对未经检查的强制转换发出编译器警告不是一个好习惯。当Map
可以使用时,针对LinkedHashMap
进行编码并不是一个好习惯。
你说要删除未经检查的演员@Thilo是什么意思? MapMap<?,?>
。这是唯一安全的演员表。【参考方案3】:
如果我们谈论的是纯地图透视但在 JCR 或 Magnolia 中,上述所有答案都是正确的;你可以使用javax.jcr.Node#getProperty
要查询 Node 对象的特定属性,可以使用; javax.jcr.Node#hasProperty
【讨论】:
这是真的,但我正在使用 yaml load 从 yaml 文件中加载值,它会创建一个嵌套映射。 我理解@AnaSustic,那么地图操作就是这里的路。以上是关于在java中的链接哈希图中查找特定键的值[重复]的主要内容,如果未能解决你的问题,请参考以下文章