最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
java 对购物车的商品进行分组排序实例
时间:2013-11-28 编辑:简简单单 来源:一聚教程网
最近有个需求,要求对购物车的商品进行排序。且同一活动的商品,要在一起显示。
最初想到的办法是首先对商品按活动进行分组,再进行组内排序。
发现这么做有点麻烦且性能比较低,经过leader提醒,可以先按活动排序,这样自然就按活动分组了。
而且jdk有自带的对集合排序的算法,废话不多说,直接上代码:
代码如下 | 复制代码 |
/** * 1、根据活动排序 * 2、根据商品类型(普通商品、赠品、组合销售从商品)排序 * 3、按商品编号排序 * 4、按加入购物车的时间排序 * @param productColumnVolist * @return */ private List 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,就按直接插入进行排序,其余则按归并排序。
相关文章
- SpringBoot测试配置属性与web启动环境解析 10-24
- vue中将el-switch值true、false改为number类型的1和0解析 10-24
- Vue中的路由配置项meta使用解读 10-24
- SpringBoot自定义bean绑定解析 10-24
- SpringBoot常用计量与bean属性校验和进制数据转换规则解析 10-24
- 工厂方法在Spring框架中的运用介绍 10-24