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

Posted 光野青和

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
}
最终的数据格式是这样的:
[{"companyName":"店铺一"
  "companyId":"555"
  "list":商品数据,这里又是一个json数据组
}]
[{"companyName":"店铺二"
  "companyId":"666"
  "list":商品数据,这里又是一个json数据组
}]

 





以上是关于java后台对查询到的商品列表按店铺分组并返回json数据_新手学习的主要内容,如果未能解决你的问题,请参考以下文章

mysql 分组查询问题 group_concat

Mysql 分组查询,并且返回最新的一条数据如何实现

js怎么实现根据后台回传的数据对商品进行排序?

是否可以按主键的一部分对 DQL 查询进行分组并返回具有 max() 日期时间记录(早于参考日期)的记录?

JS调用后台数据查询,让查询到的数据在下拉列表里显示

JS数组按日期分组