如何排序List <map <string,object>&gt;在java中</map <string,object>

时间:2012-08-09 09:15:14

标签: java

我正在

  List<Map<String,Object>> listMap = [
    {employee=17, fromdate=2010-08-01 00:00:00.0, full_inc=25572.0000},
    {employee=17, fromdate=2010-09-01 00:00:00.0, full_inc=28347.0000},  
    {employee=17, fromdate=2010-10-01 00:00:00.0, full_inc=37471.0000},
    {employee=17, fromdate=2011-02-01 00:00:00.0, full_inc=47033.0000},
    {employee=17, fromdate=2011-07-01 00:00:00.0, full_inc=50592.0000}
  ]

任何人都可以帮助我如何在java中基于full_inc从大量到低量对这个地图列表进行排序

5 个答案:

答案 0 :(得分:3)

您可以使用自定义比较器,但需要使用您的值(目前Object)来实现Comparable。根据列表的当前声明,你不能这样做(你如何比较两个随机对象?):

List<Map<String,Comparable>> listMap = ...
Collections.sort(listMap, new Comparator<Map<String, Comparable>> () {

    @Override
    public int compare(Map<String, Comparable> m1, Map<String, Comparable> m2) {
        return m2.get("full_inc").compareTo(m1.get("full_inc")); //descending
    }
});

注意:您需要添加错误检查。

答案 1 :(得分:1)

我会

  • 制作自定义类的地图对象。
  • 使您的自定义类实现Comparable
  • 使用Collections.sort()

答案 2 :(得分:1)

解决方案1是将所有要排序的条目放在TreeMap<K,V>TreeMap doc)中,其中K是您排序的标准(此处为full_inc),V是您要排序的标准。然后,TreeMap.entrySet将按照K

的compare()顺序进行迭代

解决方案2是使用full_inc创建自己的Comparable类,与同一类的对象进行比较,并使用Collections.sort

解决方案3与2几乎相同,使用Collections.sort和比较器比较您的自定义类的两个实例getFullInc()

答案 3 :(得分:0)

您可以将Collections.sort()与您自己的比较器一起使用。

答案 4 :(得分:0)

您可以在Java 8中使用

listMap.sort(Comparator.compering(m->(double) m.get("full_inc"),Comparator.nullsLast(Comparator.reverseOrder())));