【问题标题】:How to sort " ArrayList<HashMap<String, String>> arrList " alphabatically?如何按字母顺序对“ ArrayList<HashMap<String, String>> arrayList ”进行排序?
【发布时间】:2013-09-09 01:17:39
【问题描述】:

您能指导我如何按字母顺序对具有哈希映射的数组列表进行排序吗?

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);

}

【问题讨论】:

  • 尝试在java中使用COllections.Sort()?
  • 使用带有适当比较器的 TreeMap?
  • 对地图列表进行排序是什么意思?您是否只对一个键(“titleName”)感兴趣?
  • Collections.Sort 不会直接解决这个问题,因为它比较对象而不是值。
  • 请进一步说明您的要求。您的 ArrayList 包含 HashMap。你说的是按字母顺序排序HashMap?还是什么?

标签: java android arrays sorting


【解决方案1】:

实现一个Comparator&lt;HashMap&lt;String, String&gt;&gt;,它只提取与值键关联的值,然后使用 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);
    }
}

【讨论】:

【解决方案2】:

看看你的例子,我认为你根本不需要地图。你所拥有的是一个地图列表,其中每个地图只有一个键,即“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 进行排序 - 数量条目、总字节数等)。

【讨论】:

    【解决方案3】:

    是的,您可以使用 Collections.sort();带有自定义比较器。 Here is the doc.

    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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-02-03
      • 1970-01-01
      • 1970-01-01
      • 2017-06-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-28
      • 1970-01-01
      • 2012-03-24
      相关资源
      最近更新 更多