我有一些值从数据库返回作为结果集,如下所示
**resource_name menu_name menu_group_name**
DepartmentAction Department Admin Operation
PositionAction Position Admin Operation
FoodHabitAction FoodHabits Admin Operation
ReligiousAction Religious Admin Operation
NationalitiesAction Nationlities Admin Operation
我想基于menu_group_name对resource_name和menu_name进行分组,如下面的
如果menu_group_name与所有相应的组相同 resource_name和menu_mane反对menu_group_name。
这是我试过的方法,
public Map<String,List> getMenuForLoggedinRole(int roleid){
Map<String,List> menuListMap = new LinkedHashMap<String,List>();
List<MenuListViewModel> menuNamesList = new ArrayList<MenuListViewModel>();
MenuListViewModel menuViewModel;
Connection connection = getConnection();
PreparedStatement ps = null;
ResultSet rs = null;
if (connection != null) {
try {
ps = connection.prepareStatement(" select ar.resource_name,ar.menu_name,mg.menu_group_name "
+ " from m_application_resources as ar,"
+ " m_menu_groups as mg,m_access_matrix as amatrix "
+ " where ar.resourceid = amatrix.resourceid and amatrix.roleid=?");
ps.setInt(1, roleid);
rs = ps.executeQuery();
if(rs.next()) {
String menu_group_name = rs.getString("menu_group_name");
String resource_name = rs.getString("resource_name");
String menu_name = rs.getString("menu_name");
if(menuListMap.containsKey(menu_group_name)){
menuNamesList =(List) menuListMap.get(menu_group_name);
menuViewModel = new MenuListViewModel();
menuViewModel.setResource_name(resource_name);
menuViewModel.setMenu_name(menu_name);
menuNamesList.add(menuViewModel);
menuListMap.put(menu_group_name, menuNamesList);
}else{
menuViewModel = new MenuListViewModel();
menuViewModel.setResource_name(resource_name);
menuViewModel.setMenu_name(menu_name);
menuNamesList.add(menuViewModel);
menuListMap.put(menu_group_name, menuNamesList);
}
}
} catch (Exception ex) {
ex.printStackTrace();
}finally {
try {
closeConnection(connection, rs, ps);
} catch (Exception ex) {
ex.printStackTrace();
//use logger here
}
}
}
printMap(menuListMap);
return menuListMap;
}
但它没有给我令人厌恶的输出。
我的观点模型:
public class MenuListViewModel {
private String resource_name = "";
private String menu_name = "";
public String getResource_name() {
return resource_name;
}
public void setResource_name(String resource_name) {
this.resource_name = resource_name;
}
public String getMenu_name() {
return menu_name;
}
public void setMenu_name(String menu_name) {
this.menu_name = menu_name;
}
}
和
public static void printMap(Map mp) {
List menuList = new ArrayList();
MenuListViewModel model;
Iterator it = mp.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pairs = (Map.Entry)it.next();
menuList =(List) pairs.getValue();
for(int i=0;i<=menuList.size();i++){
model =(MenuListViewModel) menuList.get(i);
System.out.println("Resource_name : "+model.getResource_name());
System.out.println("Menu_name : "+model.getMenu_name());
}
System.out.println(pairs.getKey() + " = " + pairs.getValue());
it.remove(); // avoids a ConcurrentModificationException
}
}
请帮忙。
答案 0 :(得分:1)
如果key不包含在map中,那么您将实例化新的List。否则它将使用先前的列表对象(如果存在)。
if(menuListMap.containsKey(menu_group_name)){
menuNamesList =(List) menuListMap.get(menu_group_name);
menuViewModel = new MenuListViewModel();
menuViewModel.setResource_name(resource_name);
menuViewModel.setMenu_name(menu_name);
menuNamesList.add(menuViewModel);
menuListMap.put(menu_group_name, menuNamesList);
}else{
menuNamesList = new ArrayList<MenuListViewModel>();
menuViewModel = new MenuListViewModel();
menuViewModel.setResource_name(resource_name);
menuViewModel.setMenu_name(menu_name);
menuNamesList.add(menuViewModel);
menuListMap.put(menu_group_name, menuNamesList);
}