1、首先确定list所存儲的類型,比如List<Map<String,Object>>,那麼使用Collections.sort()方法,new Comparator<與List存儲的類型保持一緻>,如下示例
Collections.sort(list, new Comparator<Map<String,Object>>(){
@Override
public int compare(Map<String,Object> o1, Map<String,Object> o2) {
long tmp = Long.parseLong(String.valueOf(o1.get("num")));
long tmp2 = Long.parseLong(String.valueOf(o2.get("num")));
return tmp>tmp2?-1:1;
}
});
說明:o1和o2代表我們所要對比的兩個對象,這兩個對象都來自list當中
如:
List<Map<String,Object>> list = new ArrayList<>();
list.add("num",4); // 這個類型可以是Long類型,也可以是Integer類型,都可以用來做運算
list.add("num",2);
list.add("num",3);
Collections.sort方法中的compare方法,底層實作是使用循環來對每兩個值進行比對。比如第一次進入該方法,o1擷取到num的值是4,o2擷取到的值是2,
那麼會将二者進行比對并傳回,之後在4和3對比、2和3比對,最後進行排序。我這邊是降序,從大到小~~~
下面我把我的代碼貼進來提供參考:
/**
* 需求:産品銷售排行
*
* @param startTime 開始時間
* @param endTime 結束時間
* @return
*/
@RequestMapping(value = "/productSalesRanking", method = RequestMethod.POST)
@ResponseBody
public Object productSalesRanking(String startTime, String endTime) {
List<Map<String,Object>> list = new ArrayList<>();
try {
// 不傳時間擷取當日時間
TimeVerification timeVerification = new TimeVerification(startTime, endTime).invoke();
if (timeVerification.is())
return new BaseController().renderStatus(false, "時間格式錯誤,請使用yyyy-MM-dd", null);
startTime = timeVerification.getStartTime();
endTime = timeVerification.getEndTime();
// 查詢分組中的所有saleModel
List<Map<String,Object>> modelList = dmTicketSalesDataService.selectSaleModels();
// 根據起始時間查詢周期範圍内,saleModel(售票途徑)對應的票數,并根據對應種類票數進行從多到少排序
List<Map<String, Object>> mapList = dmTicketSalesDataService.selectProductSalesRanking(startTime, endTime);
for (int i = 0;i < modelList.size();i++){
String iModel = (String)modelList.get(i).get("saleModel");
Map<String,Object> modelMap = new HashMap<>();
String jModel = null;
for (int j = 0;j < mapList.size();j++){
jModel = (String)mapList.get(j).get("saleModel");
Long num = (Long)mapList.get(j).get("num");
if (iModel.equals(jModel)){
modelMap.put("saleModel",iModel);
modelMap.put("num",num);
break;
}
}
if (!iModel.equals(jModel)) {
modelMap.put("saleModel",iModel);
modelMap.put("num",0);
}
list.add(modelMap);
Collections.sort(list, new Comparator<Map<String,Object>>(){
@Override
public int compare(Map<String,Object> o1, Map<String,Object> o2) {
// 注意:這裡不能直接轉,需要先轉String,再轉long類型
long tmp = Long.parseLong(String.valueOf(o1.get("num")));
long tmp2 = Long.parseLong(String.valueOf(o2.get("num")));
return tmp>tmp2?-1:1;
}
});
}
if (list == null || list.isEmpty()) {
return new BaseController().renderStatus(false, "産品銷售資料不能為空!", null);
}
return new BaseController().renderStatus(true, "查詢成功!", list);
} catch (Exception e) {
logger.error("産品銷售排行有誤!", e);
return new BaseController().renderStatus(false, "接口異常", e);
}
}
最終的效果:
