JAVA中使用静态内部类Comparator实现集合的排序

来源:互联网 发布:易语言qq登陆器源码 编辑:程序博客网 时间:2024/06/01 17:22

比起Comparable接口比较器Comparator为我们在排序中提供了更宽松和更加广泛的应用实例:在实际中,常常需要对一个商品按照不同属性来排序,这时我们就能通过写出自己的Comparator来实现不同的排序方式

    public class Goods{          private int goodsId;        //编号          private String goodsName;   //品名          private double goodsOriginalPrice;  //原价          private double goodsSellPrice;  //卖价          private int goodsInStock;   //库存          private ArrayList<String> goodsShowPics;  //展示图集合url          private ArrayList<String> goodsDetailPics;    //商品图集合url          private String goodsProducer;   //生产者          private String goodsProducePlace;   //产地          private Timestamp goodsInDate;  //入库时间          private String goodsPackage;    //包装内容          private String goodsCM;     //产品规格          private String goodsService;    //售后服务          private int goodsViewed;    //商品浏览量          private int goodsSold;  //商品销售量          private double goodsPoint;      //商品评分          public Goods(){           }      }  

例如在上面的商品类中 我们可能会根据商品的价格或者入库时间比较排序

这时如果在类Goods中插入静态内部final Comparator类就可以实现

使用静态内部final类好处在于调用时候结构清晰,调用方便,并且无需重复实例化比较器对象,节省了系统开支

在Goods类中插入如下代码:

    /**          * 靜態內部類比較按入庫時間     //降序              */          public static final Comparator<Goods> GOODS_BY_INDATE = new Comparator<Goods>(){                      public int compare(Goods o1, Goods o2) {                  return o2.getGoodsInDate().compareTo(o1.getGoodsInDate());              }          };          /**          * 靜態內部類比較按售價          */          public static final Comparator<Goods> GOODS_BY_SELLPRICE = new Comparator<Goods>() {              public int compare(Goods o1, Goods o2) {                  return (int) (o1.getGoodsSellPrice()-o2.getGoodsSellPrice());              }          };          /**          * 靜態內部類比較按售價           //降序          */          public static final Comparator<Goods> GOODS_BY_SELLPRICE_DESC = new Comparator<Goods>() {              public int compare(Goods o1, Goods o2) {                  return (int) (o2.getGoodsSellPrice()-o1.getGoodsSellPrice());              }          };          /**          * 靜態內部類比較按點擊量          //降序          */          public static final Comparator<Goods> GOODS_BY_GOODSVIEWD = new Comparator<Goods>() {              public int compare(Goods o1, Goods o2) {                  // TODO Auto-generated method stub                  return o2.getGoodsViewed()-o1.getGoodsViewed();              }          };          /**          * 靜態內部類按銷量排序           //降序          */          public static final Comparator<Goods> GOODS_BY_GOODSSOLD = new Comparator<Goods>() {              public int compare(Goods o1, Goods o2) {                  return o2.getGoodsSold()-o1.getGoodsSold();              }          };          /**          * 靜態內部類按評分排序           //降序          */          public static final Comparator<Goods> GOODS_BY_POINT = new Comparator<Goods>() {                      public int compare(Goods o1, Goods o2) {                  return (int) (o2.getGoodsPoint()-o1.getGoodsPoint());              }          };  
实现了Goods类的多种比较器之后,就可以在程序中调用Collections.sort(arg1,arg2)方法了

例如,对于已经存在的名为showResult的Goods集合用下面的代码就可以实现排序了:

    if(sortType.equals("bySold")){              //按銷量時候                  Collections.sort(showResult, Goods.GOODS_BY_GOODSSOLD);              }              if(sortType.equals("byViewed")){            //按點擊量時候                  Collections.sort(showResult, Goods.GOODS_BY_GOODSVIEWD);              }              if(sortType.equals("byInDate")){            //按入庫時間時候                  Collections.sort(showResult, Goods.GOODS_BY_INDATE);              }              if(sortType.equals("byPoint")){             //按評分時候                  Collections.sort(showResult, Goods.GOODS_BY_POINT);              }              if(sortType.equals("byPrice")){             //按價格時候                  Collections.sort(showResult, Goods.GOODS_BY_SELLPRICE);              }              if(sortType.equals("byPriceDown")){         //按價格降序時候                  Collections.sort(showResult, Goods.GOODS_BY_SELLPRICE_DESC);              }  


当然,不使用内部类也是可以的,用到Comparator类,你就可以轻松的按照各种喜欢的方式排序了
原创粉丝点击