将数据库表中的多个键值对添加到HashMap

时间:2012-08-08 12:10:34

标签: java

我在下面定义了三个数据库表,在括号中提到了列名:

Product (ProductID, Price, Last_Updated)

User (UserID, Name, Address, LocationID, Last_Updated)

Location (LocationID, Loc_Name, Last_Updated)

我想使用Java(JDK 1.5)在一个集合中添加所有表的所有列名,如HashMap

我的问题是当输入重复键时,前一个值被覆盖。

我正在添加它们:

Map<String, String> map = new HashMap<String, String>();

map.add("ProductID", "Save the Product ID");
// ...
map.add("Last_Updated", "Save Last_Updated of Product table");
// ...
map.add("LocationID", "Save the LocationID");
// ...
map.add("Last_Updated", "Save Last_Updated of User table.");

现在,使用新值Last_Updated

覆盖键Save Last_Updated of User table.

但我想要两个值。

有没有办法在不使用多个HashMap结构的情况下实现它?

5 个答案:

答案 0 :(得分:2)

如果您想添加具有相同密钥的项目,那么这将是一种可能的解决方案

Map<String, List<String>> map = new HashMap<String, List<String>>();

添加元素时:

public void add(String key, String value) {
    if(!map.containsKey(key)) {
        map.put(key, new ArrayList<String>());
    }
    map.get(key).add(value);
}

当你想要访问一个元素时,那么通过map get()函数,你将得到一个字符串列表,它是一个键的值。

但是,最好使用Multimap实现:

番石榴:

Multimap - 你可以在javadoc中看到具体的实现。

Multimap<String, String> map = ArrayListMultimap.create();
map.put("a", "Apple");
map.put("a", "Almonds");
Collection<String> valuesForA = map.get("a"); // List of ("Apple", "Almonds")

Apache Commons

MultiMap - javadoc中的示例和具体实现

答案 1 :(得分:1)

将表名添加为列名称的前缀。然后您可以分离“Product.Last_Updated”,“User.Last_Updated”和“Location.Last_Updated”。
显然,您必须使用未在表或列的名称中使用的分隔符char;一个 '。'应该这样做。

答案 2 :(得分:1)

如果您仅限于JDK 5,但允许使用库,请查看公开的MultiMaps:Guava has one,以及Commons Collections

答案 3 :(得分:0)

为什么不在内存数据库中使用非常规表,如H2或HSQL等。

答案 4 :(得分:0)

使用Seperator。像管道符号(|)或点(。)