【问题标题】:How can I print all the Keys from associated with a specific value?如何打印与特定值关联的所有键?
【发布时间】:2014-05-11 04:49:08
【问题描述】:

比如我的treeMap设置为<String key, String value>

if(employeeList.containsKey(searchKey)){
    temp = "Employee: " + searchKey + ", Department: " + 
           departmentList.get(searchKey) + ", Salary: $" + employeeList.get(searchKey);
}

此循环获取与用户输入的特定键相关的所有信息。在我的例子中,如果我输入键(员工姓名),我会得到他的姓名、部门和薪水。

有什么方法可以反其道而行之吗? 那么,我可以键入部门(值)并获取与该部门关联的所有员工姓名(键)吗?

【问题讨论】:

  • 我添加了“java”标签,因为代码似乎符合 Java 编码风格...请确认它是您感兴趣的语言。
  • 你要找的答案已经在这里了:stackoverflow.com/questions/1670038/…
  • 这是使用数据库/ORM 开始变得有趣的地方;关系数据库在这种“切换查询”问题上往往要好得多,因为它们鼓励您思考您想知道的内容,而不是您如何获得它。

标签: java map hashmap key-value treemap


【解决方案1】:

使用当前数据结构,您必须遍历地图:

ArrayList<String> relatedKeys = new ArrayList<String>();
for(String k : departmentList.keySet()){
  if(departmentList.get(k).equals(searchKey))
    relatedKeys.add(k);

最后,你有一个所有相关键的列表,可以使用

for(String k : relatedKeys)
  System.out.println(k);

【讨论】:

  • 这确实是唯一的方法。也许您还应该将整个 for 循环包装在 if 语句中:if(departmentList.containsValue(searchKey)) { ... }。我认为这应该通过仅在实际存在相应键时遍历 keySet 来提高性能。
  • 从未想过这样做,但逻辑有效。而不是将它添加到数组中,我可以毫无问题地将它添加到字符串中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-16
  • 1970-01-01
  • 2022-01-09
  • 2018-04-23
相关资源
最近更新 更多