依赖jar

        <dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.56</version>
</dependency>

新版排序算法,使用Lambda表达式(推荐)

JsonUtils.java

package javax.utils;

import java.util.Arrays;
import java.util.Collections;
import java.util.List; import com.alibaba.fastjson.JSONObject; /**
* JSONObject数组排序工具类
*
* @author Logan
* @version 1.0.0
* @createDate 2019-06-15
*
*/
public class JsonUtils { /**
* 按指定key排序JSONObject对象数组
*
* @param array JSONObject对象数组
* @param key 指定排序key
*/
public static void sort(JSONObject[] array, String key) {
Arrays.sort(array, (a, b) -> JsonUtils.compare(a, b, key));
} /**
* 按指定key排序JSONObject对象集合
*
* @param list JSONObject对象集合
* @param key 指定排序key
*/
public static void sort(List<JSONObject> list, String key) {
Collections.sort(list, (a, b) -> JsonUtils.compare(a, b, key));
} /**
* 按指定key降序排序JSONObject对象数组
*
* @param array JSONObject对象数组
* @param key 指定排序key
*/
public static void sortDesc(JSONObject[] array, String key) {
Arrays.sort(array, (a, b) -> -JsonUtils.compare(a, b, key));
} /**
* 按指定key降序排序JSONObject对象集合
*
* @param list JSONObject对象集合
* @param key 指定排序key
*/
public static void sortDesc(List<JSONObject> list, String key) {
Collections.sort(list, (a, b) -> -JsonUtils.compare(a, b, key));
} /**
* 按指定key比较两个JSONObject对象大小
*
* @param a 第一个JSONObject对象
* @param b 第二个JSONObject对象
* @param key 指定进行比较的key
* @return
* <ul>
* <li>如果a==b,返回0</li>
* <li>如果a>b,返回1</li>
* <li>如果a<b,返回-1</li>
* </ul>
*/
public static int compare(JSONObject a, JSONObject b, String key) {
Object va = a.get(key);
Object vb = b.get(key); if (null == va && null == vb) {
return 0;
} if (null == va) {
return -1;
} if (null == vb) {
return 1;
} if (va.equals(vb)) {
return 0;
} if (va instanceof Number && vb instanceof Number) { // 取double值比较,兼容整数
return Double.compare(a.getDoubleValue(key), b.getDoubleValue(key));
} // 忽略大小写字符串排序
return a.getString(key).compareToIgnoreCase(b.getString(key));
} }

旧版排序算法,适用于较低版本JDK

JsonUtils.java

package javax.utils;

import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List; import com.alibaba.fastjson.JSONObject; /**
*
* JSONObject数组排序工具类
*
* @author Logan
* @createDate 2019-04-10
* @version 1.0.0
*
*/
public class JsonUtils { /**
* 按指定key排序JSONObject对象数组
*
* @param array JSONObject对象数组
* @param key 指定排序key
*/
public static void sort(JSONObject[] array, String key) {
Arrays.sort(array, new Comparator<JSONObject>() { @Override
public int compare(JSONObject a, JSONObject b) {
return JsonUtils.compare(a, b, key);
}
});
} /**
* 按指定key排序JSONObject对象集合
*
* @param list JSONObject对象集合
* @param key 指定排序key
*/
public static void sort(List<JSONObject> list, String key) {
Collections.sort(list, new Comparator<JSONObject>() { @Override
public int compare(JSONObject a, JSONObject b) {
return JsonUtils.compare(a, b, key);
}
});
} /**
* 按指定key降序排序JSONObject对象数组
*
* @param array JSONObject对象数组
* @param key 指定排序key
*/
public static void sortDesc(JSONObject[] array, String key) {
Arrays.sort(array, new Comparator<JSONObject>() { @Override
public int compare(JSONObject a, JSONObject b) {
return -1 * JsonUtils.compare(a, b, key);
}
});
} /**
* 按指定key降序排序JSONObject对象集合
*
* @param list JSONObject对象集合
* @param key 指定排序key
*/
public static void sortDesc(List<JSONObject> list, String key) {
Collections.sort(list, new Comparator<JSONObject>() { @Override
public int compare(JSONObject a, JSONObject b) {
return -1 * JsonUtils.compare(a, b, key);
}
});
} /**
* 按指定key比较两个JSONObject对象大小
*
* @param a 第一个JSONObject对象
* @param b 第二个JSONObject对象
* @param key 指定进行比较的key
* @return
* <ul>
* <li>如果a==b,返回0</li>
* <li>如果a>b,返回1</li>
* <li>如果a<b,返回-1</li>
* </ul>
*/
public static int compare(JSONObject a, JSONObject b, String key) {
Object va = a.get(key);
Object vb = b.get(key); if (null == va && null == vb) {
return 0;
} if (null == va) {
return -1;
} if (null == vb) {
return 1;
} if (va.equals(vb)) {
return 0;
} if (va instanceof Number && vb instanceof Number) { /* 取double值相减,兼容整数 */
if (a.getDoubleValue(key) - b.getDoubleValue(key) > 0) {
return 1;
} else {
return -1;
}
} return a.getString(key).compareToIgnoreCase(b.getString(key));
} }

以下是测试程序

JsonTest.java

package com.java.test;

import java.io.File;
import java.net.URL;
import java.util.List; import javax.utils.JsonUtils; import org.apache.commons.io.FileUtils;
import org.junit.Test; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; /**
* @author Logan
* @createDate 2019-04-10
* @version 1.0.0
*
*/
public class JsonTest { private static final String encoding = "UTF-8"; @Test
public void sort() {
try {
URL resource = JsonTest.class.getResource("/JsonText.txt");
String text = FileUtils.readFileToString(new File(resource.getFile()), encoding); String key = "birthday"; List<JSONObject> list = JSON.parseArray(text, JSONObject.class);
System.out.println(JSON.toJSONString(list, true));
System.out.println(); JsonUtils.sort(list, key);
System.out.println(JSON.toJSONString(list, true));
System.out.println(); JsonUtils.sortDesc(list, key);
System.out.println(JSON.toJSONString(list, true));
System.out.println(); System.out.println("-------------------------------------------");
JSONArray jsonArray = JSON.parseArray(text);
JSONObject[] array = jsonArray.toArray(new JSONObject[jsonArray.size()]);
System.out.println(JSON.toJSONString(array, true));
System.out.println(); JsonUtils.sort(array, key);
System.out.println(JSON.toJSONString(array, true));
System.out.println(); JsonUtils.sortDesc(array, key);
System.out.println(JSON.toJSONString(array, true));
System.out.println();
System.out.println("-------------------------------------------"); } catch (Exception e) {
e.printStackTrace();
}
}
}

JsonText.txt

[{
"birthday":"2000-12-21",
"number":"10003",
"name":"Hello",
"weight":120.5,
"age":16
},{
"birthday":"1998-12-21",
"number":"10002",
"name":"Hi",
"weight":150.5,
"age":18
},{
"birthday":"2006-12-21",
"number":"10005",
"name":"Good",
"weight":130.5,
"age":10
}]

.

JSONObject数组排序工具类的更多相关文章

  1. java操作excel 工具类

    java操作excel 可参考https://blog.csdn.net/xunwei0303/article/details/53213130 直接上代码: 一.java生成excel文件: pac ...

  2. [转]java中JSONObject与JSONArray的使用详细说明及有关JSON的工具类

    JSONObject与JSONArray的使用 一.JAR包简介 要使程序可以运行必须引入JSON-lib包,JSON-lib包同时依赖于以下的JAR包: 1.commons-lang.jar 2.c ...

  3. Arrays -数组工具类,数组转化字符串,数组排序等

    package cn.learn.basic; import java.util.Arrays; /* java.util.Arrays是一个与数组相关的工具类,含有大量静态方法,用来实现数组常见的操 ...

  4. java工具类

    1.HttpUtilsHttp网络工具类,主要包括httpGet.httpPost以及http参数相关方法,以httpGet为例:static HttpResponse httpGet(HttpReq ...

  5. Android开发常用工具类

    来源于http://www.open-open.com/lib/view/open1416535785398.html 主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java. 目前 ...

  6. HttpClient 4.5.x 工具类设计与实现

    最近,业务需要在java服务端发起http请求,需要实现"GET","POST","PUT"等基本方法.于是想以 "HttpCli ...

  7. Redis在JAVA中的运用(工具类)

    最近项目需要用redis在中间做缓存所以写了一个工具类作为练习用 redis版本:redis_version:3.0.504 用到阿里的解析JSON的库:fastjson import org.apa ...

  8. Json与javaBean之间的转换工具类

    /**  * Json与javaBean之间的转换工具类  *  * {@code 现使用json-lib组件实现  *    需要  *     json-lib-2.4-jdk15.jar  * ...

  9. 【java】:常用工具类

    PS; 平时用到的一些工具类,验证非空.字符切割.时间转换.金额转换 package com.jws.common.util; import java.io.UnsupportedEncodingEx ...

随机推荐

  1. import与export

    expoer default 输出的是一个对象 export 输出的是对象的一个元素

  2. Unable to verify your data submission.加入了_csrf也报400错误的解决

    <input type="hidden" name="_csrf" value="<?=Yii::$app->request-> ...

  3. 文献综述一:基于UML技术的商品管理系统设计与实现

    一.基本信息 标题:基于UML技术的商品管理系统设计与实现 时间:2018 出版源:福建电脑 文件分类:uml技术的研究 二.研究背景 使用 UML 技术对商品管理系统进行了分析与研究,使用户对商品信 ...

  4. Hive学习(三)Hive的Java客户端操作

    Hive的Java客户端操作分为JDBC和Thrifit Client,首先启动Hive远程服务: hive --service hiveserver 一.JDBC 在MyEclipse中首先创建连接 ...

  5. bootstrap3-dialog:更强大、更灵活的模态框(封装好的模态框)

    用过bootstrap框架的同学们都知道,bootstrap自带的模态框用起来很不灵活,可谓鸡肋的很.但nakupanda开源作者封装了一个更强大.更灵活的模态框——bootstrap3-dialog ...

  6. DEDE用{dede:sql}标签取出当前文档的附加表中的内容

    最近在用DEDE做项目,遇到一个需求是要在article_image.htm模板中直接取出附加表addonimages中的某一记录的imgurls字段的内容.而这条记录是不断变化的,比如我点击了< ...

  7. linq 两个字段排序

    在linq中排序方法有: OrderBy()  --对某列升序排序 ThenBy()    --某列升序后对另一列后续升序排序 OrderByDescending() --对某列降序排序 ThenBy ...

  8. 随机练习:C#实现维吉尼亚加密与解密(解密前提为已知密匙)

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  9. intellijidea课程 intellijidea神器使用技巧1-5 idea界面介绍

    菜单栏介绍: file:文件操作edit:文本操作view:视图操作navigate:跳转code:源码文件analyze:项目依赖关系分析refactor:代码重构快捷操作,如:抽取函数build: ...

  10. Vue之组件间传值

    标签: Vue Vue之父子组件传值 父向子传递通过props 子向父传递通过$emit 演示地址 代码示例如下: <!DOCTYPE html> <html lang=" ...