1. 程式人生 > 其它 >JSONArray按欄位排序並取前n位

JSONArray按欄位排序並取前n位

/**
* JSONArray按欄位排序並取前n位
*
* @param jsonArr jsonArray
* @param key 需要排序的欄位
* @param n 取前n位
* @param kind 排序型別,0 升序,1 降序
* @return 排序後新的JSONArray
*/
private JSONArray jsonArraySort(JSONArray jsonArr, String key, int n, int kind) {
//存放排序結果json陣列
JSONArray sortedJsonArray = new JSONArray();
// 用於排序的list
List<JSONObject> list = new ArrayList<>();
//遍歷待排序的json陣列,並將資料放入list
for (int i = 0; i < jsonArr.size(); i++) {
list.add(jsonArr.getJSONObject(i));
}
list.sort((a, b) -> {
Integer valA1 = 0;
Integer valA2 = 0;
try {
valA1 = Integer.parseInt((String) a.get(key));
valA2 = Integer.parseInt((String) b.get(key));
} catch (JSONException e) {
log.info("排序時發生異常+\n" + e.toString());
}
// 設定排序規則
if(kind==0){
return valA1.compareTo(valA2);
}else {
return valA2.compareTo(valA1);
}

});
//將排序後結果放入結果jsonArray
if (n >= jsonArr.size()) {
n = jsonArr.size();
}
for (int i = 0; i < n; i++) {
sortedJsonArray.add(list.get(i));
}
return sortedJsonArray;
}