JSONObject数组排序工具类
依赖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数组排序工具类的更多相关文章
- java操作excel 工具类
java操作excel 可参考https://blog.csdn.net/xunwei0303/article/details/53213130 直接上代码: 一.java生成excel文件: pac ...
- [转]java中JSONObject与JSONArray的使用详细说明及有关JSON的工具类
JSONObject与JSONArray的使用 一.JAR包简介 要使程序可以运行必须引入JSON-lib包,JSON-lib包同时依赖于以下的JAR包: 1.commons-lang.jar 2.c ...
- Arrays -数组工具类,数组转化字符串,数组排序等
package cn.learn.basic; import java.util.Arrays; /* java.util.Arrays是一个与数组相关的工具类,含有大量静态方法,用来实现数组常见的操 ...
- java工具类
1.HttpUtilsHttp网络工具类,主要包括httpGet.httpPost以及http参数相关方法,以httpGet为例:static HttpResponse httpGet(HttpReq ...
- Android开发常用工具类
来源于http://www.open-open.com/lib/view/open1416535785398.html 主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java. 目前 ...
- HttpClient 4.5.x 工具类设计与实现
最近,业务需要在java服务端发起http请求,需要实现"GET","POST","PUT"等基本方法.于是想以 "HttpCli ...
- Redis在JAVA中的运用(工具类)
最近项目需要用redis在中间做缓存所以写了一个工具类作为练习用 redis版本:redis_version:3.0.504 用到阿里的解析JSON的库:fastjson import org.apa ...
- Json与javaBean之间的转换工具类
/** * Json与javaBean之间的转换工具类 * * {@code 现使用json-lib组件实现 * 需要 * json-lib-2.4-jdk15.jar * ...
- 【java】:常用工具类
PS; 平时用到的一些工具类,验证非空.字符切割.时间转换.金额转换 package com.jws.common.util; import java.io.UnsupportedEncodingEx ...
随机推荐
- js apply和call
apply()和call()这两个方法的作用是一样的,都是在特定作用域中调用函数,等于设置函数体内this对象的只,以扩充函数赖以运行的作用域 apply:方法能劫持另外一个对象的方法,继承另外一个对 ...
- 将个人博客与github关联
目录 将个人博客与github关联 将个人博客与github关联 #基于svg <a href="https://github.com/chatlotte" class=&q ...
- Nginx 为什么要延迟关闭
防止 Nginx处理完后调用close关闭连接后 ,若缓冲区任然接收到客户端发来的内容 ,则服务器会向客户端发送RST包关闭连接,导致客户端由于收到了RST而忽略了 http response ...
- ASC19超算概述
初赛题目组成 设计超算集群(看参考文献做设计) 对超算集群进行性能测试(一般来讲的测试工具就是用HPL,找到最适合的参数,达到最优秀的计算能力) 数字图像处理(通常代码量较大,代码优化较为困难,优化偏 ...
- echarts自定义tooltip提示框内容
1.echarts自定义tooltip提示框内容 https://blog.csdn.net/dreamsup/article/details/56667330 2.关于Echarts的formatt ...
- Play on Words UVA - 10129 (欧拉回路)
题目链接:https://vjudge.net/problem/UVA-10129 题目大意:输入N 代表有n个字符串 每个字符串最长1000 要求你把所有的字符串连成一个序列 每个字符串的第 ...
- 【LDAP】LDAP介绍
原文:http://ldapman.org/articles/intro_to_ldap.html原文作者:Michael Donnelly 什么是LDAP? LDAP的英文全称是Lightweigh ...
- hduoj 2602Bone Collector
Bone Collector Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- 斗鱼扩展--DouyuRoom使用说明(十四)
1.从 https://pan.baidu.com/s/1yBfZFtcakbDxmyas0VCpRw 下载 DouyuRoom.zip 然后解压到一个目录,我是放在C盘根目录下的,你们随意.然后解压 ...
- 装配bean,基于xml
一.bean的实例化方式 1.默认构造 <bean id="" class=""></bean> 必须提供默认构造方法 2.静态工厂 用 ...