依赖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. mgo03_linux7上安装mongo4.0

    下载地址https://www.mongodb.com/download-center#community tar -xvf mongodb-linux-x86_64-rhel70-4.0.0.tgz ...

  2. js学习笔记 -- await/ async

    await 暂停async function函数,等待Promise处理完成,若Promise 状态为fulfilled,其回调resolve的参数作为await的值,Promise 状态为rejec ...

  3. 数据结构---Java---HashSet

    1.概述 1.1 HashSet不是线程安全的: 1.2 当向HashSet存入元素时,调用该对象的hashCode()值,根据hashCode()值来决定元素的存储位置: 如果hashCode()值 ...

  4. C# 序列化(Binary、Xml、Soap)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  5. Kafka Intro - Configuration

    #Notes: /opt/kafka/config/zookeeper.properties sample # the directory where the snapshot is stored.d ...

  6. Django重新整理3

    Forms组件 1.在models.py中我们建立一个新的表关系: class UserInfo(models.Model): user=models.CharField(max_length=32) ...

  7. 前台js escape及后台C# Server.UrlEncode 对QueryString传参的含~!@#$%^&*等特殊字符的处理

    通常情况下,我们在List列表页面,会包含Create,Edit,Delete等操作按钮, 而通常的处理是: Create按钮跳转到DataCreate.aspx Edit按钮跳转到DataEdit. ...

  8. 对fastdfs 文件清单进行检查,打印无效的文件

    对fastdfs 文件清单进行检查,打印无效的文件2017年12月12日 18:37:18 守望dfdfdf 阅读数:281 标签: fastdfssftpmysql 更多个人分类: 工作 问题编辑版 ...

  9. 硬盘的基础知识-SSD

    硬盘有三类:HDD(机械硬盘),SSD(固态硬盘),HHD(混合硬盘) 原理: HDD:磁性碟片 SSD: 闪存颗粒 HHD:磁性碟片的基础上加上了闪存颗粒. 这里对HDD,HHD不加说明,只对SSD ...

  10. Spring Data JPA 事务

    Spring Data JPA 是 Spring 基于 ORM 框架.JPA 规范的基础上封装的一套 JPA 应用框架,可使开发者用极简的代码即可实现对数据的访问和操作.它提供了包括增删改查等在内的常 ...