Develop with pleasure!

福岡でCloudとかBlockchainとか。

ListをValueに持つMapをListのサイズでソートする

valueにListのオブジェクトを持つMapオブジェクトがあるとして、そのMapオブジェクトをvalueに入っているListのサイズの降順でソートしたい場合。

        Map<String, List> map = new HashMap<String, List>();
        //適当にMapに値をセットする
        ....
        //Listのサイズの降順にソート
        List<Map.Entry> entries = new LinkedList(map.entrySet());
        Collections.sort(entries, new Comparator(){
            public int compare(Object o1, Object o2) {
                Map.Entry entry1 = (Map.Entry) o1;
                Map.Entry entry2 = (Map.Entry) o2;
                List list1 = (List)entry1.getValue();
                List list2 = (List) entry2.getValue();
                return list2.size() - list1.size();
            }
        });

こうすると、entriesがサイズの降順でソートされたMap.Entryのリストになっている。
Map.EntryからはそれぞれgetKey()とgetValue()でキー、値が取得できる。