jsonArray中按某字段排序

网友投稿 1264 2022-10-25

jsonArray中按某字段排序

jsonArray中按某字段排序

在一些业务场景中,我们需要对一些json数组进行按json数组中某个字段大小排序,例如这段json

现在业务要求我们根据json数组sites中的name字段排序,我们应该怎么做呢?

/** * 对json数组排序, * @param jsonArr * @param sortKey 排序关键字 * @param is_desc is_desc-false升序列 is_desc-true降序 (排序字段为字符串) * @return */ public static String jsonArraySort(JSONArray jsonArr,String sortKey,boolean is_desc) { //存放排序结果json数组 JSONArray sortedJsonArray = new JSONArray(); //用于排序的list List jsonValues = new ArrayList(); //将参数json数组每一项取出,放入list for (int i = 0; i < jsonArr.size(); i++) { jsonValues.add(JSONObject.fromObject(jsonArr.getJSONObject(i))); } //快速排序,重写compare方法,完成按指定字段比较,完成排序 Collections.sort(jsonValues, new Comparator() { //排序字段 private final String KEY_NAME = sortKey; //重写compare方法 @Override public int compare(JSONObject a, JSONObject b) { String valA = new String(); String valB = new String(); try { valA = a.getString(KEY_NAME); valB = b.getString(KEY_NAME); } catch (JSONException e) { e.printStackTrace(); } //是升序还是降序 if (is_desc){ return -valA.compareTo(valB); } else { return -valB.compareTo(valA); } } }); //将排序后结果放入结果jsonArray for (int i = 0; i < jsonArr.size(); i++) { sortedJsonArray.add(jsonValues.get(i)); } return sortedJsonArray.toString(); }

补充:

在java中有两个比较器

java.lang.Comparable接口

public interface Comparable { public int compareTo(T o);}

java.util.Comparator 接口

public interface Comparator { int compare(T o1, T o2); //省略........... }

两种比较器的区别:

java.lang.Comparable支持的是一种内比较,何为内比较:即是外对象和当前对象this的比较

this < obj ---- 返回负数 this = obj ---- 返回 0 this > obj ----

java.util.Comparator支持的是一种外比较,何为外比较,即是支持两个外对象的比较,不支持和当前对象比较

< o2 ---- 返回负数 o1 = o2 ---- 返回 0 o1 > o2 ----

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:基于C++ Poco框架的HTTP动态服务器
下一篇:Snow- 简单易用的 Go 语言业务框架
相关文章

 发表评论

暂时没有评论,来抢沙发吧~