今天做一个购物车列表接口,前端对返回数据要求按店铺名称分组,而且不同店铺分组数据中,商品列表的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数据组 }]
原文地址:https://www.cnblogs.com/findtasy/p/9866337.html
时间: 2024-10-10 04:24:45