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數據組 }]
 
        

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM