2

我用谷歌搜索了它,并尝试了一些例子,但我总是卡住。

这是错误消息,当我尝试使用时Collections.sort

sort(List<T>)类型的泛型方法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 的两个实例。

当您sort在 List 上调用该方法时,Java 将尝试将每个元素相互比较并对集合进行排序。如果无法比较元素(没有比较两个 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 回答