java 对购物车的商品进行分组排序实例
最近有个需求,要求对购物车的商品进行排序。且同一活动的商品,要在一起显示。
最初想到的办法是首先对商品按活动进行分组,再进行组内排序。
发现这么做有点麻烦且性能比较低,经过leader提醒,可以先按活动排序,这样自然就按活动分组了。
而且jdk有自带的对集合排序的算法,废话不多说,直接上代码:
* 1、根据活动排序
* 2、根据商品类型(普通商品、赠品、组合销售从商品)排序
* 3、按商品编号排序
* 4、按加入购物车的时间排序
* @param productColumnVolist
* @return
*/
private List<ProductColumnVo> productColumnSort(List<ProductColumnVo> productColumnVolist){
Collections.sort(productColumnVolist, new Comparator<ProductColumnVo>() {
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,就按直接插入进行排序,其余则按归并排序。
您可能感兴趣的文章:
php网上商城购物车代码一例
php 购物车的实现代码一例(session方式)
php中cookie mysql实现的购物车代码
php 购物车功能实现代码(入门例子)
java 对购物车的商品进行分组排序实例
php购物车的实现原理
php 购物车类的实现代码(单例模式)
django订单模块怎么实现
MV* 框架 与 DOM操作为主 JS库 的案例对比
php 购物车类实现代码一例