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”。为什么不只是有一个标题名称列表?然后您的代码将如下所示:

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 不实现可比较(因为有多种方法可以对 Maps 进行排序 - 数量条目、总字节数等)。

于 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 回答