【问题标题】:How to i sort a List<Map<String,Object>> in java如何在 java 中对 List<Map<String,Object>> 进行排序
【发布时间】:2012-08-09 09:15:13
【问题描述】:

我得到了

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

【问题讨论】:

    标签: java


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      您可以使用自定义比较器,但需要您的值(当前为 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
          }
      });
      

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

      【讨论】:

        【解决方案3】:

        我愿意

        • 将您的地图对象设为自定义类。
        • 让您的自定义类实现 Comparable
        • 使用 Collections.sort()

        【讨论】:

          【解决方案4】:

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

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

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

          【讨论】:

            【解决方案5】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2021-03-26
              • 1970-01-01
              • 2021-05-11
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-01-26
              • 2018-09-22
              相关资源
              最近更新 更多