今天做一個購物車列表接口,前端對返回數據要求按店鋪名稱分組,而且不同店鋪分組數據中,商品列表的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數據組 }]