0

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

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 列表

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

感谢您的帮助和时间..

4

3 回答 3

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
于 2013-09-09T05:02:27.480 回答
0

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

KEY     VALUE               ArrayList
TR202     1                 1-->  APP 
TR204     2                 2-->  APP 
TR205     3                 3-->  APP 
TR206     4                 4-->  NULL 
TR207     5                 5-->  NULL 
于 2013-09-09T04:52:41.470 回答
0

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

private class TestIdVal {
    String test_id_val;
    boolean isNull;
}

然后,您可以实例化new TestIdVal()对象以用作地图的键。我不建议使用 list oftag_id作为键,因为这似乎无法正确反映您的架构。看来您正在尝试执行 test_id_val => tag_id 列表。

于 2013-09-09T04:55:50.693 回答