3

リストのリストがあります。スーパーリストを並べ替えたいのは、サブリストのサイズによって異なります。リストは動的です。
リストタイプは<ArrayList<ArrayList<HashMap>>>例です。

[ [{key1=value1,key2=value2}],[],[{key1=value1}],[{key1=value1},{key2=value2},{key3=value3}]  ]  

並べ替え後、表示されます

[[{key1=value1},{key2=value2},{key3=value3}], [{key1=value1,key2=value2}],[{key1=value1}],[]  ]  

これを並べ替える方法を教えてもらえますか?

前もって感謝します。
ラックスマンチャウダリー

4

4 に答える 4

6

編集済み

マップのリストをマップのリストのサイズ順に並べ替える場合は、これを行うことができます。

o1パラメータ(およびo2)の順序を変更Integer.valueOf(o1.size()).compareTo(o2.size())して、降順で並べ替えることができることに注意してください。

public static <T> List<? extends List<T>> sortListByValue(List<? extends List<T>> list) {

    Collections.sort(list, new Comparator<List<T>>() {


        @Override
        public int compare(List<T> o1, List<T> o2) {
            //return Integer.compare(o1.size(), o2.size()); //JDK7 

            //Use this if you're using a version prior to 1.7.
            return Integer.valueOf(o1.size()).compareTo(o2.size());
        }
    });

    return list;
}   


public static void main(String[] args) {

    ArrayList<Map<String,String>> list1 = new ArrayList<>();
    list1.add(new HashMap<String, String>(){{ put("1", "a"); put("2", "b");}});
    list1.add(new HashMap<String, String>(){{ put("1", "a"); put("2", "b"); put("3", "c");}});
    list1.add(new HashMap<String, String>(){{ put("1", "a"); }});

    ArrayList<Map<String,String>> list2 = new ArrayList<>();
    list2.add(new HashMap<String, String>(){{ put("1", "a"); put("2", "b");}});
    list2.add(new HashMap<String, String>(){{ put("1", "a"); put("2", "b"); put("3", "c");}});

    ArrayList<Map<String,String>> list3 = new ArrayList<>();
    list3.add(new HashMap<String, String>(){{ put("1", "a"); put("2", "b");}});

    ArrayList<ArrayList<Map<String,String>>> list = new ArrayList<>();
    list.add(list1);
    list.add(list2);
    list.add(list3);
    System.out.println(list);
    System.out.println(sortListByValue(list));
}
于 2012-07-11T09:48:56.283 に答える
2
Collections.sort(list, new Comparator<List<? extends Map>>() {
        public int compare(List<? extends Map> list1, List<? extends Map> list2) {
            return Integer.valueOf(list1.size()).compareTo(Integer.valueOf(list2.size()));
        }
    });

ジェネリックスをそれほど気にしない場合は、次のように単純化できます。

Collections.sort(list, new Comparator<List>() {
            public int compare(List list1, List list2) {
                return Integer.valueOf(list1.size()).compareTo(Integer.valueOf(list2.size()));
            }
        });
于 2012-07-11T09:01:11.127 に答える
1
public static <T> List<List<T>> sortBySublistSize(List<List<T>> superList) {
    Collections.sort(superList, new Comparator<List<T>>() {
        @Override
        public int compare(List<T> o1, List<T> o2) {
            return Integer.compare(o1.size(), o2.size());
        }
    });

    return superList;
}
于 2012-07-11T09:59:31.713 に答える
0

通常の並べ替えアルゴリズムを使用できますが、値に基づく代わりに、要素の長さに基づくだけです。

于 2012-07-11T09:00:19.340 に答える