使用hashmap将单个键映射到多个值的实现

时间:2013-09-09 04:32:42

标签: java hashmap

我有一个在表中使用test_id_val配置的tag_id列表。我使用以下查询检索数据

Select test_id_val , tag_id from p_details

对于一个简单的情况,我宁愿使用哈希映射来存储键值对并检索数据,但在我的情况下,test_id_val可以接受空值

如需考虑以下结构:

 1. APP TR202 
 2. APP TR204 
 3. APP TR205 
 4.NULL TR206 
 5.NULL TR207 
 6.NULL SM504 
 7.NULL SM505

所以我将有一个tag_ids值列表映射到test_id键,该键可以为null或包含值。我的要求是将test_id键映射到tag_ids列表

有没有具体的方法来做到这一点?

感谢您的帮助和时间..

3 个答案:

答案 0 :(得分:1)

您可以考虑使用com.google.common.collect.Multimap的一些实现。

您可以将多个值与一个键关联,然后使用map.get(key)方法将它们作为集合检索。在你的情况下:

Multimap<String, String> mmap = HashMultimap.create();

mmap.put("APP", "TR202");
mmap.put("APP", "TR204");
mmap.put("APP", "TR205");
mmap.put(null, "TR206");
mmap.put(null, "TR207");
mmap.put(null, "SM504");
mmap.put(null, "SM505");

for (String key : mmap.keySet()) {
  for (String value : mmap.get(key)) {
    System.out.println(key + ": " + value);
  }
}

打印:

null: SM505
null: SM504
null: TR207
null: TR206
APP: TR202
APP: TR205
APP: TR204

答案 1 :(得分:0)

您可以使用ArrayList存储test_id_val。然后在HashMap中,将tag_id作为关键字并将ArrayList的索引存储为test_id_val,作为HashMap的值。 ArrayList允许空值,因此您可以轻松存储特定tag_id的空值。像这样......

KEY     VALUE               ArrayList
TR202     1                 1-->  APP 
TR204     2                 2-->  APP 
TR205     3                 3-->  APP 
TR206     4                 4-->  NULL 
TR207     5                 5-->  NULL 

答案 2 :(得分:0)

您可能想重新考虑这是否是您拥有的最佳数据库架构设计,但如果您选择坚持使用它,请为test_id_val创建一个包装类,您可以在其中指定是否真的是{{1}通过null

boolean

然后,您可以实例化private class TestIdVal { String test_id_val; boolean isNull; } 个对象以用作地图的键。我不建议使用new TestIdVal()列表作为密钥,因为这似乎不能正确地镜像您的架构。看来你正试图做test_id_val =&gt; tag_id列表。