一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

java 对购物车的商品进行分组排序实例

时间:2013-11-28 编辑:简简单单 来源:一聚教程网

最近有个需求,要求对购物车的商品进行排序。且同一活动的商品,要在一起显示。
最初想到的办法是首先对商品按活动进行分组,再进行组内排序。
发现这么做有点麻烦且性能比较低,经过leader提醒,可以先按活动排序,这样自然就按活动分组了。
而且jdk有自带的对集合排序的算法,废话不多说,直接上代码:

 代码如下 复制代码
/**
       * 1、根据活动排序
       * 2、根据商品类型(普通商品、赠品、组合销售从商品)排序
       * 3、按商品编号排序
       * 4、按加入购物车的时间排序
       * @param productColumnVolist
       * @return
       */
       private List productColumnSort(List productColumnVolist){
              Collections.sort(productColumnVolist, new Comparator() {
                     public int compare(ProductColumnVo o1, ProductColumnVo o2) {
                            if(StringUtils.isNotBlank(o1.getActiveID())
                                          && StringUtils.isBlank(o2.getActiveID())){
                                   //有活动的在前面显示
                                   return -1;
                            }else if(StringUtils.isBlank(o1.getActiveID())
                                          && StringUtils.isNotBlank(o2.getActiveID())){
                                   return 1;
                            }else if(StringUtils.isNotBlank(o1.getActiveID())
                                          && StringUtils.isNotBlank(o2.getActiveID())){
                                   //按活动排序
                                   int activeCompareResult = o1.getActiveID().compareTo(o2.getActiveID());
                                   if(activeCompareResult != 0){
                                          return activeCompareResult;
                                   }
                            }
                            //根据商品类型(普通商品、赠品、组合销售从商品)
                            int productTypeCompareResult = o1.getProductType() - o2.getProductType();
                            if(productTypeCompareResult == 0){
                                   //按商品编号排序
                                   int commodityTypeCompareResult = o1.getCommodityNo().compareTo(o2.getCommodityNo());
                                   if(commodityTypeCompareResult == 0){
                                          //按加入购物车的时间排序
                                          return (o1.getAddDate().before(o2.getAddDate()) ? -1:1);
                                   }else{
                                          return commodityTypeCompareResult;
                                   }
                            }else{
                                   return productTypeCompareResult;
                            }
                     }
              });
              return productColumnVolist;
       }

够简单吧。
其中组合销售的主商品的productType是0,从商品的productType是3。赠品活动主商品的productType是0,赠品时1。

注意:compare(a,b)方法:根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。如果大于0,则调整顺序,否则按原来顺序。

顺便研究了下Collections.sort的实现,这是一个稳定的排序。如果集合的长度小于7,就按直接插入进行排序,其余则按归并排序。

热门栏目