废话不多说,直接上代码。
通过比较器接口排序
public static void main(String[] args) {
String jsonStr = "[{\"name\":\"张三\",\"oid\":1001,\"age\":26},{\"name\":\"李四\",\"oid\":1002,\"age\":22},{\"name\":\"王五\",\"oid\":1003,\"age\":17},{\"name\":\"赵六\",\"oid\":1004,\"age\":15}]";
System.out.println("排序前:" + jsonStr);
String sortedJson = doSort(jsonStr);
System.out.println("排序后:" + sortedJson);
System.out.println("Lambda排序后:" + doSortLambda(jsonStr));
}
/**
* @param jsonStr 要排序的 jsonArray 字符串
* @return 排序好的 jsonArray 字符串
* @date 00:42 2022/11/4
* @author gulihua
**/
public static String doSort(String jsonStr) {
// 将字符串转换为 json 数组
JSONArray jsonArr = JSON.parseArray(jsonStr);
//存放排序结果json数组
JSONArray sortedJson = new JSONArray();
// 用于排序的list
List<JSONObject> list = new ArrayList<JSONObject>();
for (int i = 0; i < jsonArr.size(); i++) {
list.add(jsonArr.getJSONObject(i));
}
Collections.sort(list, new Comparator<JSONObject>() {
//排序字段
private static final String SORT_FIELD1 = "age";
private static final String SORT_FIELD2 = "oid";
@Override
public int compare(JSONObject a, JSONObject b) {
// 设置排序规则
int i = a.getInteger(SORT_FIELD1).compareTo(b.getInteger(SORT_FIELD1));
if (i == 0) {
int j = a.getInteger(SORT_FIELD2).compareTo(b.getInteger(SORT_FIELD2));
return j;
}
return i;
}
});
for (int i = 0; i < jsonArr.size(); i++) {
sortedJson.add(list.get(i));
}
return sortedJson.toString();
}
通过Lambda表达式
/**
* @param jsonStr 要排序的 jsonArray 字符串
* @return 排序好的 jsonArray 字符串
* @date 00:42 2022/11/4
* @author gulihua
**/
public static String doSortLambda(String jsonStr) {
// 将字符串转换为 json 数组
JSONArray jsonArr = JSON.parseArray(jsonStr);
//排序字段
String SORT_FIELD1 = "age";
String SORT_FIELD2 = "oid";
jsonArr.sort((a, b) -> {
int i = ((JSONObject) a).getInteger(SORT_FIELD1).compareTo(((JSONObject) b).getInteger(SORT_FIELD1));
if (i == 0) {
int j = ((JSONObject) a).getInteger(SORT_FIELD2).compareTo(((JSONObject) b).getInteger(SORT_FIELD2));
return j;
}
return i;
});
return jsonArr.toJSONString();
}代码执行结果

苏ICP备16040035号-5