0

ハッシュマップを持つ配列リストをアルファベット順にソートする方法を教えてもらえますか?

JSONArray   jArr2 = new JSONArray(jsonString2);

for(int i=0;i<jArr2.length();i++){

HashMap<String, String> map = new HashMap<String, String>();
map.put("titleName",jArr2.getJSONObject(i).getString("titleName"))
programList.add(map);

}
4

3 に答える 3

2

値キーに関連付けられた値を抽出するだけの を実装し、Comparator<HashMap<String, String>>Collections.sort メソッドを使用して配列リストを並べ替えます。

例:

class MyComparator implements Comparator<Map<String, String>>{

    private final String key;

    public MyComparator(String key)
    {
        this.key = key;
    }

    public int compare(Map<String, String> first,
                       Map<String, String> second)
    {
        // TODO: Null checking, both for maps and values
        String firstValue = first.get(key);
        String secondValue = second.get(key);
        return firstValue.compareTo(secondValue);
    }
}
于 2013-09-05T09:20:00.107 に答える
1

あなたの例を見ると、マップが関与する必要はまったくないと思います。あなたが持っているのはマップのリストで、すべてのマップには「titleName」というキーが 1 つしかありません。タイトル名のリストだけを持っていないのはなぜですか? 次に、コードは次のようになります。

JSONArray jArr2 = new JSONArray(jsonString2);

List<String> titleNames = new ArrayList<>();

for (int i = 0; i < jArr2.length(); i++) {

    titleNames.add(jArr2.getJSONObject(i).getString("titleName"))

}

リストには titleNames のみが含まれていることがわかっているので、Maps でデータ構造を複雑にする必要はありません。

次に、次を使用してリストを簡単に並べ替えることができます

Collections.sort(titleNames);

これは機能しますが、マップのリストで Collections.sort() を提案する他の回答は機能しません。これは、titleNamees が Comparable を実装する文字列のリストである (つまり、sort() メソッドが相互に順序付けする方法を知っている) のに対し、Map は Comparable を実装していないためです (マップを順序付けする方法は複数あるためです。エントリ、合計バイト数など)。

于 2013-09-05T09:29:54.010 に答える
0

はい、Collections.sort(); を使用できます。カスタムコンパレーター付き。これがドキュメントです。

Collections.sort(YOUR_ARRAY_LIST, new YourCustomComparator());

そして、これはあなたが持っている必要があるクラスでなければなりません

class YourCustomComparator implements Comparator<HashMap<String, String>> {

    @Override
    public int compare(HashMap<String, String> lhs, HashMap<String, String> rhs) {

        // check here your objects. lhs and rhs. compare them as you want
        // return 1 if lhs is greater than rhs
        // return 0 if ther are same
        // return -1 otherwise
    }
}
于 2013-09-05T09:25:08.520 に答える