🍀 简窝 Blog
📃 文章详情

jsonArray中按照某一字段排序

废话不多说,直接上代码。

通过比较器接口排序

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();
    }

代码执行结果

 

 

📑 目录