首页 > 编程语言 > 详细

JSONObject数组排序工具类

时间:2019-04-10 22:08:49      阅读:116      评论:0      收藏:0      [点我收藏+]

 

依赖jar

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

 

JsonUtils.java

package javax.utils;

import java.util.Arrays;
import java.util.Comparator;

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 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 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>
     *         <li></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));
    }

}

 

 

 

 

以下是测试程序

Person.java

package com.java.vo;

/**
 * @author Logan
 * @createDate 2019-04-10
 * @version 1.0.0
 *
 */
public class Person {

    private String number;

    private String name;

    private int age;

    private double weight;

    private String birthday;

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public double getWeight() {
        return weight;
    }

    public void setWeight(double weight) {
        this.weight = weight;
    }

    public String getBirthday() {
        return birthday;
    }

    public void setBirthday(String birthday) {
        this.birthday = birthday;
    }

}

 

JsonTest.java

package test;

import java.util.ArrayList;
import java.util.List;

import javax.utils.JsonUtils;

import org.junit.Test;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.java.vo.Person;

/**
 * @author Logan
 * @createDate 2019-04-10
 * @version 1.0.0
 *
 */
public class JsonTest {

    @Test
    public void sort() {
        List<Person> list = new ArrayList<>();
        Person p = new Person();
        p.setNumber("10003");
        p.setName("Hello");
        p.setAge(16);
        p.setWeight(120.50);
        p.setBirthday("2000-12-21");
        list.add(p);

        p = new Person();
        p.setNumber("10002");
        p.setName("Hi");
        p.setAge(18);
        p.setWeight(150.50);
        p.setBirthday("1998-12-21");
        list.add(p);

        p = new Person();
        p.setNumber("10005");
        p.setName("Good");
        p.setAge(10);
        p.setWeight(130.50);
        p.setBirthday("2006-12-21");
        list.add(p);

        JSONArray jsonArray = JSON.parseArray(JSON.toJSONString(list));
        JSONObject[] array = jsonArray.toArray(new JSONObject[jsonArray.size()]);
        System.out.println(JSON.toJSONString(array, true));
        System.out.println();

        JsonUtils.sort(array, "birthday");
        System.out.println(JSON.toJSONString(array, true));
        System.out.println();

        JsonUtils.sortDesc(array, "birthday");
        System.out.println(JSON.toJSONString(array, true));
        System.out.println();
    }
}

 

 

 

 

.

JSONObject数组排序工具类

原文:https://www.cnblogs.com/jonban/p/10686477.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!