0

次のような結果セットとしてデータベースからいくつかの値が返されます

**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_maneを次のようにグループ化したい

 if the menu_group_name is same than group all the corresponding
    resource_name and menu_mane against to 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;
    }

印刷して1つの値だけが印刷されているのを見たとき、他の値は印刷されていません。これを行う方法を教えてください。私はそれが非常に単純であることを知っていますあなたの助けが必要です。

よろしく

4

2 に答える 2

1

いくつかのクラス CustomClass を作成し、メンバーresource_namemenu_name

今すぐ作成しますmap<String, List<CustomClass>>

結果セットを繰り返し、マップにデータを追加し続ける

menu_group_name作成したキーとカスタムクラスが値になります。データをマップに配置しながら、そのキーが存在するかどうかを確認し、存在する場合はリストを取得して新しいカスタムクラスを追加します。そうでない場合は、カスタムクラスで新しいリストを作成し、キーと値のペアを追加します

于 2012-10-17T10:06:39.073 に答える
0

このようなコードを実行することは可能だと思います

class Pair {
                String v1;
                String v2;
                Pair(String value1, String value2){
                    v1=  value1;
                    v2 = value2;
                }
            }
            Map<String , List<Pair>> maps = new HashMap<>();
            List<Pair> keypair = new ArrayList<Pair>();
            keypair.add(new Pair("", ""));
            maps.put("Hello", keypair);
            maps.get("Hello").add(new Pair("", ""));
于 2012-10-17T10:13:15.437 に答える