说明
下面以为JSONArray的排序为例子。将排序的规则封装成一个个算法(Comparator),通过修改规则的具体实现,可以改变排序结果。
代码
package com.ydfind.demo.designmode;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
/**
* 以为JSONArray的排序为例子。将排序的规则封装成一个个算法,通过修改规则的具体实现算法,可以改变排序
*/
public class StrategyDemo {
private static Logger logger = LoggerFactory.getLogger(StrategyDemo.class);
public static Comparator<JSONObject> getIntComparator(final String key){
return new Comparator<JSONObject>() {
@Override
public int compare(JSONObject o1, JSONObject o2) {
int i1 = o1.getIntValue(key);
int i2 = o2.getIntValue(key);
if(i1 == i2){
return 0;
}else {
return i1 > i2 ? 1 : -1;
}
}
};
}
public static Comparator<JSONObject> getStrComparator(final String key){
return new Comparator<JSONObject>() {
@Override
public int compare(JSONObject o1, JSONObject o2) {
String str1 = o1.getString(key);
String str2 = o2.getString(key);
return str1.compareToIgnoreCase(str2);
}
};
}
public static void sort(JSONArray jsonArray, String key, Comparator comparator){
LinkedList<Object> list = new LinkedList<Object>();
for(int i = 0; i < jsonArray.size(); i++){
list.add(jsonArray.get(i));
}
Collections.sort(list, comparator);
jsonArray.clear();
for(int i = 0; i < list.size(); i++){
jsonArray.add(list.get(i));
}
list = null;
}
public static void main(String[] args){
String jsonStr = "[{\"int\": \"1\",\"str\": \"z\"},{\"int\": \"4\",\"str\": \"q\"},{\"int\": \"2\",\"str\": \"y\"},{\"int\": \"5\", \"str\": \"o\"},{\"int\": \"3\", \"str\": \"x\"}]";
JSONArray jsonArray = JSON.parseArray(jsonStr);
logger.info("--------按整型int排序------------------------------------");
sort(jsonArray, "int", getIntComparator("int"));
for(int i = 0; i < jsonArray.size(); i++){
logger.info("第" + i + "元素 = " + jsonArray.get(i).toString());
}
logger.info("--------按String排序------------------------------------");
sort(jsonArray, "str", getStrComparator("str"));
for(int i = 0; i < jsonArray.size(); i++){
logger.info("第" + i + "元素 = " + jsonArray.get(i).toString());
}
}
}
maven依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>