0

我正进入(状态

  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从高到低对这个地图列表进行排序

4

5 回答 5

4

您可以在 Java 8 中使用,如下所示:

listMap.sort(Comparator.comparing(m->(double) m.get("full_inc"),Comparator.nullsLast(Comparator.reverseOrder())));
于 2019-08-22T11:24:40.570 回答
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
    }
});

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

于 2012-08-09T09:20:30.973 回答
1

我会

  • 使您的地图对象成为自定义类。
  • 使您的自定义类实现 Comparable
  • 使用 Collections.sort()
于 2012-08-09T09:20:52.497 回答
1

解决方案 1 是将您想要排序的所有条目放入TreeMap<K,V>TreeMap doc)中,其中 K 是您排序的标准(此处为 full_inc),V 是您想要排序的内容。然后 TreeMap.entrySet 将按照您的 compare() 顺序进行迭代K

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

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

于 2012-08-09T09:24:03.023 回答
0

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

于 2012-08-09T09:19:48.800 回答