码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-10-28 20:53:17      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:取出   要求   没有   查询   list   nbsp   hashmap   一个   ice   

今天做一个购物车列表接口,前端对返回数据要求按店铺名称分组,而且不同店铺分组数据中,商品列表的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
}
最终的数据格式是这样的:
[{"companyName":"店铺一"
  "companyId":"555"
  "list":商品数据,这里又是一个json数据组
}]
[{"companyName":"店铺二"
  "companyId":"666"
  "list":商品数据,这里又是一个json数据组
}]

 



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

标签:取出   要求   没有   查询   list   nbsp   hashmap   一个   ice   

原文地址:https://www.cnblogs.com/findtasy/p/9866337.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!