java后台对查询到的商品列表按店铺分组并返回json数据

今天做一个购物车列表接口,前端对返回数据要求按店铺名称分组,而且不同店铺分组数据中,商品列表的key要同一个字段,一番查询摸索后,最终用如下代码解决问题,不当之处请大家斧正:

List<ShoppingCart> cartList = shoppingService.getCartList(userId);//这是从数据库获取的购物车商品列表
Map<Integer,List<ShoppingCart>> map = new HashMap<>();//新建一个map,准备用来分组
for (ShoppingCart shoppingCart : cartList) {
    //将结果以店铺Id进行分组
    List<ShoppingCart> groupList = map.get(shoppingCart.getCompanyId());
    if (groupList == null) {
        groupList = new ArrayList<ShoppingCart>();//如果没有获取到,新建组,组名是店铺ID
        groupList.add(shoppingCart);
        map.put(shoppingCart.getCompanyId(), groupList);
    }else{
        groupList.add(shoppingCart);
    }
}//写到这分组就好了,map中key就是组名,值就是对应的商品列表;但前端还要求此组名key用同一个字段,所以还需要处理
//思路是这样的,再建一个Map,命名为resMap,把上面map中的商品列表数据取出来,再放到新的resMap中,并把新的key命名为"list",然后把这个resMap添加到一个resList集合中;以下是具体步骤
Set<Integer> keys = map.keySet();//把map中的key拿出来,准备依据key取值
List<Map<String,Object>> resList = new ArrayList<>();
for (Integer key : keys) {
    List<ShoppingCart> list = map.get(key);//使用循环,通过Key把map中的数据依次取出来
    Map<String,Object> resMap = new HashMap<>();//每次循环都创建新的resMap
    resMap.put("list", list);//取出来后重新命名添加到新的resMap中
    resMap.put("companyName", list.get(0).getCompanyName());//同时把店铺ID和店铺名字单独拿出来添加进去
    resMap.put("companyId", list.get(0).getCompanyId());
    resList.add(resMap);//把处理好的数据添加到reslist
}
String resData = JsonUtil.toJson(resList, "1", "");//最后的resList就是最终的数据,把它向前端返回
flush(resData, response);

最终返回的数据格式是这样的: [{
"companyName":"店铺一" "companyId":"555" "list":商品数据,这里又是一个json数据组 }] [{"companyName":"店铺二" "companyId":"666" "list":商品数据,这里又是一个json数据组 }]

 



posted @ 2018-10-28 19:19  程序员Kevîn  阅读(3648)  评论(0编辑  收藏  举报