【问题标题】:Find a value for a specific key in a linked hashmap in java [duplicate]在java中的链接哈希图中查找特定键的值[重复]
【发布时间】: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

标签: java aem jcr magnolia


【解决方案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,那么地图操作就是这里的路。
猜你喜欢
  • 2012-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-14
  • 2017-08-02
  • 2017-01-19
  • 2013-12-24
  • 2012-07-26
相关资源
最近更新 更多