refactor SortUtils to MapComparator

This commit is contained in:
sand
2012-07-25 13:24:39 +08:00
parent 7cbaf3b878
commit 26f716a19c
3 changed files with 63 additions and 61 deletions
@@ -5,6 +5,7 @@ import java.io.PrintWriter;
import java.sql.Driver;
import java.sql.DriverManager;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.LinkedHashMap;
import java.util.List;
@@ -25,7 +26,7 @@ import com.alibaba.druid.stat.DruidDataSourceStatManager;
import com.alibaba.druid.stat.JdbcSqlStat;
import com.alibaba.druid.stat.JdbcStatManager;
import com.alibaba.druid.util.IOUtils;
import com.alibaba.druid.util.SortUtils;
import com.alibaba.druid.util.MapComparator;
import com.alibaba.druid.util.StringUtils;
import com.alibaba.fastjson.JSON;
@@ -283,7 +284,9 @@ public class StatViewServlet extends HttpServlet {
}
// orderby
SortUtils.sortMapList(orderBy, array, DEFAULT_ORDER_TYPE.equals(orderType));
if (orderBy != null && orderBy.trim().length() != 0) {
Collections.sort(array, new MapComparator<String, Object>(orderBy, DEFAULT_ORDER_TYPE.equals(orderType)));
}
// page
int fromIndex = (page - 1) * perPageCount;
@@ -0,0 +1,58 @@
package com.alibaba.druid.util;
import java.text.Collator;
import java.util.Comparator;
import java.util.Date;
import java.util.Map;
/**
* @author sandzhang<sandzhangtoo@gmail.com>
*/
public class MapComparator<K extends Object, V extends Object> implements Comparator<Map<K, V>> {
private boolean isDesc;
private String orderByKey;
public MapComparator(String orderByKey, boolean isDesc) {
this.orderByKey = orderByKey;
this.isDesc = isDesc;
}
private int compare(Number o1, Number o2) {
return (int) (o1.doubleValue() - o2.doubleValue());
}
private int compare(String o1, String o2) {
return Collator.getInstance().compare(o1, o2);
}
private int compare(Date o1, Date o2) {
return (int) (o1.getTime() - o2.getTime());
}
@Override
public int compare(Map<K, V> o1, Map<K, V> o2) {
int result = compare_0(o1, o2);
if (isDesc) result = -result;
return result;
}
public int compare_0(Map<K, V> o1, Map<K, V> o2) {
Object v1 = o1.get(orderByKey);
Object v2 = o2.get(orderByKey);
if (v1 == null && v2 == null) return 0;
if (v1 == null) return -1;
if (v2 == null) return 1;
if (v1 instanceof Number) return compare((Number) v1, (Number) v2);
if (v1 instanceof String) return compare((String) v1, (String) v2);
if (v1 instanceof Date) return compare((Date) v1, (Date) v2);
return 0;
}
}
@@ -1,59 +0,0 @@
package com.alibaba.druid.util;
import java.text.Collator;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* @author sandzhang<sandzhangtoo@gmail.com>
*/
public class SortUtils {
public static void sortMapList(final String orderByKey, List<Map<String, Object>> targetList, final boolean isDesc) {
if (orderByKey == null || orderByKey.length() == 0) return;
Collections.sort(targetList, new Comparator<Map<String, Object>>() {
private int compare(Number o1, Number o2) {
return (int) (o1.doubleValue() - o2.doubleValue());
}
private int compare(String o1, String o2) {
return Collator.getInstance().compare(o1, o2);
}
private int compare(Date o1, Date o2) {
return (int) (o1.getTime() - o2.getTime());
}
@Override
public int compare(Map<String, Object> o1, Map<String, Object> o2) {
int result = compare_0(o1, o2);
if (isDesc) result = -result;
return result;
}
public int compare_0(Map<String, Object> o1, Map<String, Object> o2) {
Object v1 = o1.get(orderByKey);
Object v2 = o2.get(orderByKey);
if (v1 == null && v2 == null) return 0;
if (v1 == null) return -1;
if (v2 == null) return 1;
if (v1 instanceof Number) return compare((Number) v1, (Number) v2);
if (v1 instanceof String) return compare((String) v1, (String) v2);
if (v1 instanceof Date) return compare((Date) v1, (Date) v2);
return 0;
}
});
}
}