我在下面定义了三个数据库表,在括号中提到了列名:
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
结构的情况下实现它?
答案 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")
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。像管道符号(|)或点(。)