zoukankan      html  css  js  c++  java
  • 关于使用collection.sort实现List<Map<String, Object>>排序

    如题所见,现要对List<Map<String, Object>>此类型的一个list进行排序,排序依据是map中的某个key对应的value

    众所周知,如果这个value的数据类型是int或double等,简言之可以转化为数字类型的,比如BigDecimal类型,那么排序就简单了

    Collections.sort(resultList, new Comparator<Map<String, Object>>() {
      public int compare(Map<String, Object> b1, Map<String, Object> b2) {
        return (b1.get("prd_batch_no") == null ? BigDecimal.ZERO : (BigDecimal) b1.get("prd_batch_no")).compareTo(

            b2.get("prd_batch_no") == null ? BigDecimal.ZERO : (BigDecimal) b2.get("prd_batch_no"));

      }
    });

    如上做法就可以实现排序了,当然,默认是升序,如果要降序,对换一下两个参数的位置应该就能实现了

    那么现在要做排序的字段的类型是String类型,所以不能直接用上述方式实现,笨办法就是一个个遍历取值来比较做排序了,向什么冒泡法啊之类的了

    下面的写法还是通过Collections.sort来实现排序,不过是重写compare方法而已,回头来想想也是简单

    Collections.sort(resultList, new Comparator<Map<String, Object>>() {
      public int compare(Map<String, Object> b1, Map<String, Object> b2) {
      String no1 = b1.get("prd_batch_no") == null ? "" : b1.get("prd_batch_no").toString();
      String no2 = b2.get("prd_batch_no") == null ? "" : b2.get("prd_batch_no").toString();
      Collator comp = Collator.getInstance(java.util.Locale.ENGLISH);
      if (comp.compare(no1, no2) > 0) {
        return 1;
      } else if (comp.compare(no1, no2) < 0) {
        return -1;
      }
      return 0;
      }
    });

    升序都出来了,那如果要做降序,应该也没什么问题了吧!!!

  • 相关阅读:
    php备份数据库类分享
    nginx https配置后无法访问,可能防火墙在捣鬼
    linux服务器,svn认证失败,配置问题,防火墙等等
    为了解决linux配置Nginx 只能关闭防火墙才能访问的问题
    nginx 防火墙、权限问题
    思数云hadoop目录
    delete
    善用GIMP(Linux下的Photoshop),图像处理轻松又自由
    超赞干货!2016年新鲜出炉的20款网页开发工具推荐
    10款Web前端工具
  • 原文地址:https://www.cnblogs.com/binTke170120/p/6526520.html
Copyright © 2011-2022 走看看