参考写法
paramArray.sort(Comparator.comparing(obj -> ((JSONObject) obj).getStr("type")));
paramArray.sort(Comparator.comparing(obj -> ((JSONObject) obj).getStr("type")).reversed());
用例调试
package com.java8.test;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import org.junit.Test;
import java.util.Comparator;
public class DemoJava8Test {
/**
* 对JSONArray自定义属性来比较
* 按指定字段排序,升序和倒序
* <p>
* 升序 1 2 3
* 倒序 3 2 1
*/
@Test
public void sortBySpecifiedFieldByNumber() {
JSONObject param1 = new JSONObject();
param1.set("type", "2");
JSONObject param2 = new JSONObject();
param2.set("type", "3");
JSONObject param3 = new JSONObject();
param3.set("type", "1");
JSONArray paramArray = new JSONArray();
paramArray.add(param1);
paramArray.add(param2);
paramArray.add(param3);
System.out.println("原始数据:" + paramArray.toString());
paramArray.sort(Comparator.comparing(obj -> ((JSONObject) obj).getStr("type")));
paramArray.sort(Comparator.comparing(obj -> ((JSONObject) obj).getStr("type")).reversed());
System.out.println("排序(升序):" + paramArray.toString());
System.out.println("排序(降序):" + paramArray.toString());
//原始数据:[{"type":"2"},{"type":"3"},{"type":"1"}]
//排序(升序):[{"type":"3"},{"type":"2"},{"type":"1"}]
//排序(降序):[{"type":"3"},{"type":"2"},{"type":"1"}]
}
/**
* 增删改的时候
*/
@Test
public void sortBySpecifiedFieldByString() {
JSONObject param1 = new JSONObject();
param1.set("type", "insert");
JSONObject param2 = new JSONObject();
param2.set("type", "update");
JSONObject param3 = new JSONObject();
param3.set("type", "delete");
JSONArray paramArray = new JSONArray();
paramArray.add(param1);
paramArray.add(param2);
paramArray.add(param3);
System.out.println("原始数据:" + paramArray.toString());
paramArray.sort(Comparator.comparing(obj -> ((JSONObject) obj).getStr("type")));
System.out.println("排序(升序):" + paramArray.toString());
paramArray.sort(Comparator.comparing(obj -> ((JSONObject) obj).getStr("type")).reversed());
System.out.println("排序(降序):" + paramArray.toString());
//原始数据:[{"type":"insert"},{"type":"update"},{"type":"delete"}]
//排序(升序):[{"type":"delete"},{"type":"insert"},{"type":"update"}]
//排序(降序):[{"type":"update"},{"type":"insert"},{"type":"delete"}]
}
}
comparing 方法的使用
从注释信息不难看出 comparing 方法传入一个函数,这个函数携带一个参数,参数类型为List对象或者JSONArray对象
reversed 方法的使用
从注释信息不难看出 reversed 方法返回一个比较器,而且是强制执行此逆序