2

私はそれをグーグルで検索し、いくつかの例を試しましたが、いつも行き詰まります。

を使用しようとすると、次のエラー メッセージが表示されますCollections.sort

sort(List<T>)typeのジェネリック メソッドはCollections、引数 ( ) には適用できませんArrayList<HashMap<String,String>>。推論された型HashMap<String,String>は、境界付きパラメーターの有効な代替ではありません<T extends Comparable<? super T>>

私のコードはこれに似ています。

ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();

//Get the data (see above)
JSONObject json = JSONfunctions.getJSONfromURL("http://xxxxxxxxxxxxxxxxxxxxxx");

try {
    //Get the element that holds the earthquakes ( JSONArray )
    JSONArray earthquakes = json.getJSONArray("earthquakes");

    //Loop the Array
    for (int i = 0; i < earthquakes.length(); i++) {
        HashMap<String, String> map = new HashMap<String, String>();
        JSONObject e = earthquakes.getJSONObject(i);

        map.put("id", String.valueOf(i));
        map.put("name", "Earthquake name:" + e.getString("eqid"));
        map.put("magnitude", "Magnitude: " + e.getString("magnitude"));
        mylist.add(map);
    }
} catch (JSONException e) {
    Log.e("log_tag", "Error parsing data " + e.toString());
}

ListAdapter adapter = new SimpleAdapter(this, mylist, R.layout.main,
        new String[]{"name", "magnitude"},
        new int[]{R.id.item_title, R.id.item_subtitle});

setListAdapter(adapter);
4

2 に答える 2

3

このエラーは、HashMap の 2 つのインスタンスを単純に比較できないために発生します。

List でメソッドを呼び出すsortと、Java は各要素を相互に比較してコレクションを並べ替えようとします。要素を比較できない場合 (2 つの HashMap を比較する明白な方法がない場合、基準は何でしょうか?)、そのエラーが発生します。

そのリストを並べ替える必要は本当にありますか? もしそうなら、どの基準で?

これを達成する唯一の方法は、独自のComparatorを作成し、それを使用して、特定の基準を考慮して HashMaps のインスタンスを比較することです。

于 2012-07-02T14:04:31.903 に答える
1

@pcalcao で既に説明されているように、(基準に基づいて) マップを並べ替える方法を決定し、カスタム コンパレータでその並べ替え順序を実装し、そのコンパレータで Collections.sort を呼び出す必要があります。

たとえば、名前のアルファベット順にソートしたい場合、次のように記述します。

Collections.sort(mylist, new Comparator<Map<String, String>>() {

    @Override
    public int compare(Map<String, String> o1, Map<String, String> o2) {
        String name1 = o1.get("name");
        String name2 = o2.get("name");
        if (name1 == null) return -1;
        return name1.compareTo(name2);
    }
});
于 2012-07-02T14:59:48.587 に答える