我的数据库中有两个表,即Menu和Sub_Menu ...我已经使用JOIN查询从这两个表中检索了数据,它看起来像这样
`SELECT menu.menu_name AS menu_name, sub_menu.sub_menu_name FROM menu LEFT JOIN user_category ON menu.user_category_id = user_category.user_category_id LEFT JOIN sub_menu ON menu.menu_id = sub_menu.menu_id WHERE user_category.user_category_name = "Normal";`
在此之后我所做的就是使用LinkedHashMap<String, String>
来存储结果。现在,问题在这里上升。当我打印输出时,重复键的最后一个值只显示,其他值被省略...我想要显示的是一个具有多个值的唯一键..我已经尝试使用LinkedHashMap<String, ArrayList<String>>
但是可以&# 39;做对了!!!
`
LinkedHashMap<String, ArrayList<String>> menuSubMenu = new LinkedHashMap<String, ArrayList<String>>();`
`ArrayList<String> subMenu = null;`
`String key = null;`
while (rs.next()) {
key = rs.getString("menu_name");
if (key.equals(rs.getString("menu_name"))) {
key = rs.getString("menu_name");
subMenu = new ArrayList<String>();
subMenu.add(rs.getString("sub_menu_name"));
} else {
subMenu = null;
}
menuSubMenu.put(key, subMenu);
}
答案 0 :(得分:1)
我猜你的问题就在于你将数据放入地图而不是把它拿出来的地方。在创建新数组后,您需要确保将数组列表放回到地图中,并且在下次遇到该单词时将数组列表拉回来。
答案 1 :(得分:1)
很抱歉,但您的代码示例有点令人困惑,但您可以尝试这种方式:
LinkedHashMap<String, ArrayList<String>> menuSubMenu = new LinkedHashMap<String, ArrayList<String>>();
while(true){
String key = rs.getString("menu_name");
if(!menuSubMenu.containsKey(key)){
menuSubMenu.put(key, new ArrayList<String>());
}
menuSubMenu.get(key).add(rs.getString("sub_menu_name"));
}
希望有所帮助
答案 2 :(得分:0)
我必须同意The Thom您必须检查Hashmap中已存在的条目:
LinkedHashMap<String, ArrayList<String>> menuSubMenu = new LinkedHashMap<String, ArrayList<String>>();
while (rs.next()) {
final String key = rs.getString("menu_name");
final ArrayList<String> subMenu = menuSubMenu.get(key);
if (subMenu == null) {
subMenu = new ArrayList<String>();
menuSubMenu.put(key, subMenu);
}
subMenu.add(rs.getString("sub_menu_name"));
}