代码中引用的其他类,请Java通用的排序工具类,支持数组、List、Map、Set排序,排序的内容可以是一个java定义的类型也可以是一个对象,根据对象的属性名称或方法名称进行排序(方法名称需要带括号),支持多个字段排序功能、如果对像中用一个map可以根据key排序对象。设置可以排序一个树型结构的对象。具体Demo和使用方法太多了。。将来有机会在补吧。代码中依赖的类参考地址如下:
反射工具类:释放资源、获取对对象属性、设置属性等
Java对象比较、空判断等工具
以下是排序工具类的代码:
排序条件实体类,用于复杂的排序(比如排序一个user.getRole().name这样的对象)
package cn.elwy.common.util.sort;
import java.text.Format;
import java.text.ParsePosition;
import java.util.Comparator;
import java.util.Map;
/**
* 排序条件实体类
* @author huangsq
* @version 1.0, 2014-07-25
* @since 1.0, 2014-07-25
*/
public class SortCondition {
/** 是否升序 */
private boolean isAsc;
/** 方法名称 */
private String methodName;
/** 排序比较器 */
private Comparator<Object> comparator;
/** 格式化类 */
private Format format;
/** ParsePosition */
private ParsePosition parsePosition;
/** 排序的map */
private Map<?, ?> map;
/** 是否表格形式获取数据 */
private boolean isTable;
/** 排序的map按值排序 */
private boolean isSortMapByValue;
/** 如果元素为Map,是否支持方法名作为Key */
private boolean isSupportMap;
public SortCondition(boolean isAsc, String methodName) {
this(isAsc, methodName, null);
}
public SortCondition(boolean isAsc, String methodName, Comparator<Object> comparator) {
this.isAsc = isAsc;
this.methodName = methodName;
this.comparator = comparator;
}
public boolean isAsc() {
return isAsc;
}
public void setAsc(boolean isAsc) {
this.isAsc = isAsc;
}
public String getMethodName() {
return methodName;
}
public void setMethodName(String methodName) {
this.methodName = methodName;
}
public Comparator<Object> getComparator() {
return comparator;
}
public void setComparator(Comparator<Object> comparator) {
this.comparator = comparator;
}
public Format getFormat() {
return format;
}
public void setFormat(Format format) {
this.format = format;
}
public ParsePosition getParsePosition() {
return parsePosition;
}
public void setParsePosition(ParsePosition parsePosition) {
this.parsePosition = parsePosition;
}
public Map<?, ?> getMap() {
return map;
}
public void setMap(Map<?, ?> map) {
this.map = map;
}
public boolean isTable() {
return isTable;
}
public void setTable(boolean isTable) {
this.isTable = isTable;
}
public boolean isSortMapByValue() {
return isSortMapByValue;
}
public void setSortMapByValue(boolean isSortMapByValue) {
this.isSortMapByValue = isSortMapByValue;
}
public boolean isSupportMap() {
return isSupportMap;
}
public void setSupportMap(boolean isSupportMap) {
this.isSupportMap = isSupportMap;
}
}
排序工具类
package cn.elwy.common.util.sort;
import java.math.BigDecimal;
import java.text.Collator;
import java.text.Format;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import cn.elwy.common.util.AssertUtil;
import cn.elwy.common.util.ReflectUtil;
/**
* 利用反射机制进行排序工具类,支持数组、List、Set、Map的排序
* 可以支持多属性排序,支持子对象中的属性排序(例user对象中的role的name属性进行排序,method="getRole.getName")
* @author huangsq
* @version 1.0, 2014-07-25
* @since 1.0, 2014-07-25
*/
public class SortUtil {
private static Logger logger = LoggerFactory.getLogger(SortUtil.class);
/** 中文排序 */
public static final Comparator<Object> CHINA_COMPARATOR = Collator.getInstance(Locale.CHINA);
private SortUtil() {
}
/**
* 根据指定的比较器排序一个数组中的元素
* @param arrays 需要排序的数组
* @param comparator 排序比较器
*/
public static void sort(Object[] arrays, Comparator<Object> comparator) {
Arrays.sort(arrays, comparator);
}
/**
* 根据指定的比较器排序一个List中的元素
* @param list 需要排序的集合
* @param comparator 排序比较器
*/
public static void sort(List<?> list, Comparator<Object> comparator) {
Collections.sort(list, comparator);
}
/**
* 根据指定的比较器排序一个Set中的元素
* @param set 需要排序的集合
* @param comparator 排序比较器
* @return Set TreeSet对象
*/
@SuppressWarnings("unchecked")
public static <T> Set<T> sort(Set<?> set, Comparator<Object> comparator) {
Set<Object> sortSet = new TreeSet<Object>(comparator);
sortSet.addAll(set);
return (Set<T>) sortSet;
}
/**
* 根据指定的比较器排序一个Map中的元素
* @param <K, V>
* @param map 需要排序的Map
* @param comparator 排序比较器
* @return Map TreeMap对象
*/
@SuppressWarnings("unchecked")
public static <K, V> Map<K, V> sort(Map<?, ?> map, Comparator<Object> comparator) {
Map<Object, Object> sortMap = new TreeMap<Object, Object>(comparator);
sortMap.putAll(map);
return (Map<K, V>) sortMap;
}
/**
* 排序一个数组中的元素,元素必需为Java提供的数据类型
* @param arrays 需要排序的数组
* @param isAsc 是否升序
*/
public static void sort(Object[] arrays, boolean isAsc) {
sort(arrays, getComparator(isAsc));
}
/**
* 排序一个List中的元素,元素必需为Java提供的数据类型
* @param list 需要排序的集合
* @param isAsc 是否升序
*/
public static void sort(List<?> list, boolean isAsc) {
sort(list, getComparator(isAsc));
}
/**
* 排序一个Set中的元素,元素必需为Java提供的数据类型
* @param set 需要排序的集合
* @param isAsc 是否升序
*/
public static <T> Set<T> sort(Set<?> set, boolean isAsc) {
return sort(set, getComparator(isAsc));
}
/**
* 根据Map的Key排序一个Map中的元素,Key必需为Java提供的数据类型
* @param <K, V>
* @param map 需要排序的map
* @param isAsc 是否升序
* @return
*/
public static <K, V> Map<K, V> sort(Map<?, ?> map, boolean isAsc) {
return sort(map, getComparator(isAsc));
}
/**
* 根据Map的Value排序一个Map中的元素,Value必需为Java提供的数据类型
* @param <K, V>
* @param map 需要排序的map
* @param isAsc 是否升序
* @return
*/
public static <K, V> Map<K, V> sortMapByValue(Map<?, ?> map, boolean isAsc) {
return sort(map, getComparator(map, isAsc));
}
/**
* 利用java反射机制排序一个对象数组
* @param arrays 需要排序的数组
* @param isAsc 是否升序
* @param fieldName 对象中的方法
*/
public static void sort(Object[] arrays, boolean isAsc, String fieldName) {
sort(arrays, getComparator(isAsc, fieldName));
}
/**
* 利用java反射机制排序一个集合对象
* @param list 需要排序的集合
* @param isAsc 是否升序
* @param fieldName 对象中的方法
*/
public static void sort(List<?> list, boolean isAsc, String fieldName) {
sort(list, getComparator(isAsc, fieldName));
}
/**
* 利用java反射机制排序一个Set对象
* @param set 需要排序的集合
* @param isAsc 是否升序
* @param fieldName 对象中的方法
*/
public static <T> Set<T> sort(Set<?> set, boolean isAsc, String fieldName) {
return sort(set, getComparator(isAsc, fieldName));
}
/**
* 利用java反射机制排序一个map对象,根据Map的Key排序一个Map中的元素
* @param <K, V>
* @param map 需要排序的map
* @param isAsc 是否升序
* @param fieldName key对象中的方法
* @return
*/
public static <K, V> Map<K, V> sort(Map<?, ?> map, boolean isAsc, String fieldName) {
return sort(map, getComparator(isAsc, fieldName));
}
/**
* 利用java反射机制排序一个map对象,根据Map的Value排序一个Map中的元素
* @param <T>
* @param map 需要排序的map
* @param isAsc 是否升序
* @param fieldName 对象中的方法
* @return
*/
public static <K, V> Map<K, V> sortMapByValue(Map<?, ?> map, boolean isAsc, String fieldName) {
return sort(map, getComparator(map, isAsc, fieldName));
}
/**
* 利用java反射机制排序一个对象数组
* @param arrays 需要排序的数组
* @param isAsc 是否升序,如果数组下标不足方法参数个数,将按最后一个状态表示后续方法的排序是否升序
* @param fieldNames 对象中的方法列表
*/
public static void sort(Object[] arrays, boolean[] isAsc, String... fieldNames) {
sort(arrays, getComparator(isAsc, fieldNames));
}
/**
* 利用java反射机制排序一个集合对象
* @param list 需要排序的集合
* @param isAsc 是否升序,如果数组下标不足方法参数个数,将按最后一个状态表示后续方法的排序是否升序
* @param fieldNames 对象中的方法列表
*/
public static void sort(List<?> list, boolean[] isAsc, String... fieldNames) {
sort(list, getComparator(isAsc, fieldNames));
}
/**
* 利用java反射机制排序一个Set对象
* @param set 需要排序的集合
* @param isAsc 是否升序,如果数组下标不足方法参数个数,将按最后一个状态表示后续方法的排序是否升序
* @param methodNameList 对象中的方法列表
*/
public static <T> Set<T> sort(Set<?> set, boolean[] isAsc, String... fieldNames) {
return sort(set, getComparator(isAsc, fieldNames));
}
/**
* 利用java反射机制排序一个map对象,根据Map的Key排序一个Map中的元素
* @param <K, V>
* @param map 需要排序的map
* @param isAsc 是否升序,如果数组下标不足方法参数个数,将按最后一个状态表示后续方法的排序是否升序
* @param fieldNames Key对象中的方法列表
* @return
*/
public static <K, V> Map<K, V> sort(Map<?, ?> map, boolean[] isAsc, String... fieldNames) {
return sort(map, getComparator(isAsc, fieldNames));
}
/**
* 利用java反射机制排序一个map对象,根据Map的Value排序一个Map中的元素
* @param <K, V>
* @param map 需要排序的map
* @param isAsc 是否升序,如果数组下标不足方法参数个数,将按最后一个状态表示后续方法的排序是否升序
* @param fieldNames 值对象中的方法列表
* @return
*/
public static <K, V> Map<K, V> sortMapByValue(Map<?, ?> map, boolean[] isAsc, String... fieldNames) {
return sort(map, getComparator(map, isAsc, fieldNames));
}
/**
* 根据指定的条件排序一个数组中的元素
* @param arrays 需要排序的数组
* @param condition 排序条件
*/
public static void sort(Object[] arrays, SortCondition condition) {
sort(arrays, getComparator(condition));
}
/**
* 根据指定的条件排序一个List中的元素
* @param list 需要排序的集合
* @param condition 排序条件
*/
public static void sort(List<?> list, SortCondition condition) {
sort(list, getComparator(condition));
}
/**
* 根据指定的条件排序一个Set中的元素
* @param set 需要排序的集合
* @param condition 排序条件
* @return Set TreeSet对象
*/
public static <T> Set<T> sort(Set<?> set, SortCondition condition) {
return sort(set, getComparator(condition));
}
/**
* 根据指定的比较器排序一个Map中的元素
* @param <K, V>
* @param map 需要排序的Map
* @param condition 排序条件
* @return Map TreeMap对象
*/
public static <K, V> Map<K, V> sort(Map<?, ?> map, SortCondition condition) {
return sort(map, getComparator(condition));
}
/**
* 根据指定的条件列表排序一个数组中的元素
* @param arrays 需要排序的数组
* @param conditionList 条件集,按list先后顺序进行排序
*/
public static void sort(Object[] arrays, List<SortCondition> conditionList) {
sort(arrays, getComparator(conditionList));
}
/**
* 根据指定的条件列表排序一个List中的元素
* @param list 需要排序的集合
* @param conditionList 条件集,按list先后顺序进行排序
*/
public static void sort(List<?> list, List<SortCondition> conditionList) {
sort(list, getComparator(conditionList));
}
/**
* 根据指定的条件列表排序一个Set中的元素
* @param set 需要排序的Set
* @param conditionList 条件集,按list先后顺序进行排序
* @return Set TreeSet对象
*/
public static <T> Set<T> sort(Set<?> set, List<SortCondition> conditionList) {
return sort(set, getComparator(conditionList));
}
/**
* 根据指定的条件列表排序一个Map中的元素
* @param <K, V>
* @param map 需要排序的Map
* @param conditionList 条件集,按list先后顺序进行排序
* @return Map TreeMap对象
*/
public static <K, V> Map<K, V> sort(Map<?, ?> map, List<SortCondition> conditionList) {
return sort(map, getComparator(conditionList));
}
/**
* 根据指定的比较器排序一个树形结构的数组对象中的元素
* @param arrays 需要排序的数组
* @param comparator 排序比较器
*/
public static void sortTree(Object[] arrays, Comparator<Object> comparator, String method) {
if (AssertUtil.isEmpty(arrays)) {
return;
}
sort(arrays, comparator);
for (Object object : arrays) {
Object[] child = ReflectUtil.getMethodValue(object, method);
if (AssertUtil.isNotEmpty(child)) {
sortTree(child, comparator, method);
}
}
}
/**
* 根据指定的比较器排序一个树形结构的List对象中的元素
* @param list 需要排序的集合
* @param comparator 排序比较器
*/
public static void sortTree(List<?> list, Comparator<Object> comparator, String method) {
if (AssertUtil.isEmpty(list)) {
return;
}
sort(list, comparator);
for (Object object : list) {
List<?> child = ReflectUtil.getMethodValue(object, method);
if (AssertUtil.isNotEmpty(child)) {
sortTree(child, comparator, method);
}
}
}
/**
* 根据排序方式获取Comparator
* @param isAsc 是否升序
* @return Comparator 排序比较器
*/
public static Comparator<Object> getComparator(final boolean isAsc) {
return new Comparator<Object>() {
public int compare(Object value1, Object value2) {
return compareTo(isAsc, value1, value2);
}
};
}
/**
* 根据Map的value排序方式获取Comparator
* @param isAsc 是否升序
* @return Comparator 排序比较器
*/
public static Comparator<Object> getComparator(final Map<?, ?> map, final boolean isAsc) {
return new Comparator<Object>() {
public int compare(Object o1, Object o2) {
return compareTo(isAsc, map.get(o1), map.get(o2));
}
};
}
/**
* 根据方法和排序方式获取Comparator,如果方法名称为空,则不使用反射机制
* @param isAsc 是否升序
* @param fieldName 方法名称
* @return Comparator 排序比较器
*/
public static Comparator<Object> getComparator(final boolean isAsc, final String fieldName) {
return new Comparator<Object>() {
public int compare(Object o1, Object o2) {
Object value1 = null;
Object value2 = null;
if (AssertUtil.isEmpty(fieldName)) {
value1 = o1;
value2 = o2;
} else {
// 利用反射得到具体的值
value1 = ReflectUtil.getFieldValue(o1, fieldName);
value2 = ReflectUtil.getFieldValue(o2, fieldName);
}
return compareTo(isAsc, value1, value2);
}
};
}
/**
* 根据方法名称列表和排序方式获取Comparator,方法名称列表不允许为空
* @param isAsc 是否升序
* @param methodNameList 方法名称列表,按list先后顺序进行排序
* @return Comparator 排序比较器
*/
public static Comparator<Object> getComparator(boolean[] isAsc, String... methodNames) {
List<Comparator<Object>> comparatorList = new ArrayList<Comparator<Object>>();
int index = isAsc.length - 1;
for (int i = 0; i < methodNames.length; i++) {
if (i >= index) {
comparatorList.add(getComparator(isAsc[index], methodNames[i]));
} else {
comparatorList.add(getComparator(isAsc[i], methodNames[i]));
}
}
return getComparatorByComparatorList(comparatorList);
}
/**
* 根据Map的value的方法和排序方式获取Comparator
* @param map 需要排序的map
* @param isAsc 是否升序
* @param fieldName Map值对象的方法
* @return Comparator 排序比较器
*/
public static Comparator<Object> getComparator(final Map<?, ?> map, final boolean isAsc, final String fieldName) {
return new Comparator<Object>() {
public int compare(Object o1, Object o2) {
Object value1 = null;
Object value2 = null;
if (AssertUtil.isEmpty(fieldName)) {
value1 = o1;
value2 = o2;
} else {
// 利用反射得到具体的值
value1 = ReflectUtil.getFieldValue(o1, fieldName);
value2 = ReflectUtil.getFieldValue(o2, fieldName);
}
return compareTo(isAsc, map.get(value1), map.get(value2));
}
};
}
/**
* 根据Map的value的方法名称列表和排序方式获取Comparator,方法名称列表不允许为空
* @param isAsc 是否升序
* @param methodNameList 值对象的方法名称列表,按list先后顺序进行排序
* @return Comparator 排序比较器
*/
public static Comparator<Object> getComparator(final Map<?, ?> map, final boolean[] isAsc, String... fieldNames) {
final List<Comparator<Object>> comparatorList = new ArrayList<Comparator<Object>>();
int index = isAsc.length - 1;
for (int i = 0; i < fieldNames.length; i++) {
if (i >= index) {
comparatorList.add(getComparator(map, isAsc[index], fieldNames[i]));
} else {
comparatorList.add(getComparator(map, isAsc[i], fieldNames[i]));
}
}
return getComparatorByComparatorList(comparatorList);
}
/**
* 根据排序条件获取Comparator,如果方法名称为空,则不使用反射机制
* @param condition 排序条件
* @return Comparator 排序比较器
*/
public static Comparator<Object> getComparator(final SortCondition condition) {
return new Comparator<Object>() {
public int compare(Object o1, Object o2) {
Object value1 = null;
Object value2 = null;
String methodName = condition.getMethodName();
Map<?, ?> map = condition.getMap();
if (map != null) { // 排序一个Map中的元素
if (condition.isSortMapByValue()) { // 根据value排序
value1 = map.get(o1);
value2 = map.get(o2);
} else { // 根据Key排序
value1 = o1;
value2 = o2;
}
} else if (AssertUtil.isEmpty(methodName)) { // 方法名称为空,直接比较两个对象
value1 = o1;
value2 = o2;
} else if (condition.isTable()) {
value1 = ReflectUtil.getTableColumnValue(o1, methodName, condition.isSupportMap());
value2 = ReflectUtil.getTableColumnValue(o2, methodName, condition.isSupportMap());
} else {
value1 = ReflectUtil.getTreeColumnValue(o1, methodName, condition.isSupportMap());
value1 = ReflectUtil.getTreeColumnValue(o2, methodName, condition.isSupportMap());
}
try {
Format format = condition.getFormat();
if (format != null) {
if (condition.getParsePosition() != null) {
value1 = format.parseObject(value1.toString(), condition.getParsePosition());
value2 = format.parseObject(value2.toString(), condition.getParsePosition());
} else {
value1 = format.parseObject(value1.toString());
value2 = format.parseObject(value2.toString());
}
}
if (condition.getComparator() != null) {
int result = condition.getComparator().compare(value1, value2);
if (!condition.isAsc()) {
result = -result;
}
return result;
} else {
return compareTo(condition.isAsc(), value1, value2);
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
return 0;
}
}
};
}
/**
* 获取支持多个条件进行排序的比较器
* @param conditions 条件集,按list先后顺序进行排序
* @return Comparator 支持多个条件排序的比较器
*/
public static Comparator<Object> getComparator(List<SortCondition> conditions) {
final List<Comparator<Object>> comparatorList = new ArrayList<Comparator<Object>>();
for (SortCondition sortCondition : conditions) {
comparatorList.add(getComparator(sortCondition));
}
return getComparatorByComparatorList(comparatorList);
}
/**
* 获取支持多个条件进行排序的比较器
* @param comparatorList 排序比较器列表,按list先后顺序进行排序
* @return Comparator 支持多个条件排序的比较器
*/
public static Comparator<Object> getComparatorByComparatorList(final List<Comparator<Object>> comparatorList) {
return new Comparator<Object>() {
public int compare(Object o1, Object o2) {
for (Comparator<Object> c : comparatorList) {
int result = c.compare(o1, o2);
if (result != 0) {
return result;
}
}
return 0;
}
};
}
/**
* 比较两个对象的排列次序
* @param isAsc
* @param object1
* @param object2
* @return
*/
public static int compareTo(boolean isAsc, Object object1, Object object2) {
int result = 0;
try {
result = compareTo(object1, object2);
if (!isAsc) {
result = -result;
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
return result;
}
/**
* 比较两个对象的排列次序
* @param object1
* @param object2
* @return
*/
public static int compareTo(Object object1, Object object2) {
boolean isEmptyV1 = AssertUtil.isEmpty(object1);
boolean isEmptyV2 = AssertUtil.isEmpty(object2);
if (!isEmptyV1 && !isEmptyV2) {
String value1 = object1.toString();
String value2 = object2.toString();
if (object1 instanceof Date) {
return ((Date) object1).compareTo((Date) object2);
} else if (object1 instanceof Number || (isNumeric(value1) && isNumeric(value2))) {
try {
return new BigDecimal(value1).compareTo(new BigDecimal(value2));
} catch (Exception e) {
return value1.compareTo(value2);
}
} else {
return value1.compareTo(value2);
}
} else if (!isEmptyV1 && isEmptyV2) {
return 1;
} else if (isEmptyV1 && !isEmptyV2) {
return -1;
} else {
return 0;
}
}
/**
* 判断字符串的内容是不是全是数字
* @param str
* @return
*/
public static boolean isNumeric(String str) {
if (str == null) {
return false;
}
int sz = str.length();
for (int i = 0; i < sz; i++) {
if (!Character.isDigit(str.charAt(i))) {
return false;
}
}
return true;
}
}
测试类,方法不全,后期有空补上
package cn.elwy.common.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import cn.elwy.common.Person;
import cn.elwy.common.util.sort.SortCondition;
import cn.elwy.common.util.sort.SortUtil;
/**
* 利用反射机制进行排序测试类
* @author huangsq
* @version 1.0, 2014-07-25
* @since 1.0, 2014-07-25
*/
public class SortUtilTest {
private List<Person> list;
private boolean isPrintResult = false;
@Before
public void initList() throws ParseException {
int n = 100;
list = new ArrayList<Person>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
for (int i = 0; i < n; i++) {
int mod5 = i % 5;
boolean isStatus = mod5 == 1;
list.add(new Person(i, "张三", 19 + mod5, true, 20 - mod5, 1.5 * mod5, sdf.parse("1986-02-19"),
"2012-2-31 18:01:50"));
list.add(new Person(i, "张三2", 19 + mod5, true, 20 - mod5, 2.0 * mod5, sdf.parse("1986-02-19"),
"2012-2-31 18:01:50"));
list.add(new Person(i + mod5, "张三2", 19 + mod5, true, 20 - mod5, 2.0 * mod5, sdf.parse("1986-02-19"),
"2012-2-31 18:01:50"));
list.add(new Person(i, "张三2", 19 + mod5, true, 20 - mod5, 1.0 * mod5, sdf.parse("1986-02-19"),
"2012-1-31 18:01:50"));
list.add(new Person(i, "张三3", 26 + mod5, true, 30 - mod5, 3.0 * mod5, sdf.parse("1986-01-19"),
"2012-1-31 18:01:50"));
list.add(new Person(i, "张三2", 19 + mod5, true, 50 - mod5, 2.0 * mod5, sdf.parse("1986-03-19"),
"2012-1-31 18:01:50"));
list.add(new Person(i + 1, "李四", 19 + mod5, true, 6 - mod5, null, sdf.parse("1986-3-28"),
"2013-11-10 18:10:30"));
list.add(new Person(i + 2, "王五", 25 - mod5, isStatus, 3, 6.0 + mod5, sdf.parse("1986-01-31"),
"2012-1-31 20:01:50"));
list.add(new Person(i + 2, "王五2", 25 - mod5, isStatus, 3, 6.0 + mod5, sdf.parse("1986-05-19"),
"2012-5-31 20:01:50"));
list.add(new Person(i + 3, "赵六", 26 + mod5, !isStatus, 6 - mod5, 6.5 - mod5, sdf.parse("1986-02-19"),
"2012-2-31 20:11:50"));
}
}
@Test
public void testSortByByString() {
List<String> list1 = new ArrayList<String>();
list1.add("2231231");
list1.add("8");
list1.add("1123");
list1.add("g");
list1.add("9adfsad");
list1.add("9a2312dfsad");
list1.add("911adfsad");
list1.add("一");
list1.add("3");
list1.add("g");
list1.add("3");
list1.add("3");
list1.add("a");
System.out.println("testListByString=================");
long startTime = System.currentTimeMillis();
SortUtil.sort(list1, true);
System.out.println(System.currentTimeMillis() - startTime);
System.out.println("testListByString=================");
if (!isPrintResult) {
return;
}
for (int i = 0; i < list1.size(); i++) {
System.out.print(list1.get(i) + " ,");
}
}
@Test
public void testSortByMethod() throws ParseException {
// Integer id, String name, int age, boolean isStatus, long salary, Double salary1, Date birthday
System.out.println("testSortByMethod=====getRegTime============");
long startTime = System.currentTimeMillis();
SortUtil.sort(list, true, "regTime");
System.out.println(System.currentTimeMillis() - startTime);
print(list);
System.out.println("testSortByMethod======getRegTime===========");
}
@Test
public void testSortByMethods() throws ParseException {
// Integer id, String name, int age, boolean isStatus, long salary, Double salary1, Date birthday
System.out.println("testSortByMethods===getRegTime, getBirthday, getAge, getSalary1, getId==============");
long startTime = System.currentTimeMillis();
String[] methodNames = new String[] { "regTime", "birthday", "age", "salary1", "id" };
SortUtil.sort(list, new boolean[] { true }, methodNames);
System.out.println(System.currentTimeMillis() - startTime);
print(list);
System.out.println("testSortByMethods====getRegTime, getBirthday, getAge, getSalary1, getId=============");
}
@Test
public void testSortUtilByCondition() throws ParseException {
// Integer id, String name, int age, boolean isStatus, long salary, Double salary1, Date birthday
System.out.println("testSortUtilByCondition===========name======");
SortCondition condition = new SortCondition(false, "name");
condition.setSupportMap(true);
long startTime = System.currentTimeMillis();
SortUtil.sort(list, condition);
System.out.println(System.currentTimeMillis() - startTime);
print(list);
System.out.println("testSortUtilByCondition========name=========");
System.out.println("testSortUtilByCondition=====getRegTime============");
condition = new SortCondition(true, "getRegTime()");
condition.setFormat(new SimpleDateFormat("yyyy-MM-dd"));
startTime = System.currentTimeMillis();
SortUtil.sort(list, condition);
System.out.println(System.currentTimeMillis() - startTime);
print(list);
System.out.println("testSortUtilByCondition=========getRegTime========");
System.out.println("testSortUtilByCondition=======getAge==========");
condition = new SortCondition(false, "getAge()");
startTime = System.currentTimeMillis();
SortUtil.sort(list, condition);
System.out.println(System.currentTimeMillis() - startTime);
print(list);
System.out.println("testSortUtilByCondition==========getAge=======");
System.out.println("testSortUtilByCondition======birthday==========");
condition = new SortCondition(true, "birthday");
startTime = System.currentTimeMillis();
SortUtil.sort(list, condition);
System.out.println(System.currentTimeMillis() - startTime);
print(list);
System.out.println("testSortUtilByCondition============birthday=====");
System.out.println("testSortUtilByCondition=======salary1==========");
condition = new SortCondition(true, "salary1");
startTime = System.currentTimeMillis();
SortUtil.sort(list, condition);
System.out.println(System.currentTimeMillis() - startTime);
print(list);
System.out.println("testSortUtilByCondition========salary1=========");
System.out.println("testSortUtilByCondition==========id=======");
condition = new SortCondition(true, "id");
startTime = System.currentTimeMillis();
SortUtil.sort(list, condition);
System.out.println(System.currentTimeMillis() - startTime);
print(list);
System.out.println("testSortUtilByCondition==========id=======");
}
@Test
public void testSortUtilByConditions() throws ParseException {
// Integer id, String name, int age, boolean isStatus, long salary, Double salary1, Date birthday
System.out.println("testSortUtilByConditions====getRegTime(), getAge(), name, birthday, salary1, id===");
List<SortCondition> conditions = new ArrayList<SortCondition>();
SortCondition e1 = new SortCondition(true, "getRegTime()");
e1.setFormat(new SimpleDateFormat("yyyy-MM-dd"));
conditions.add(e1);
conditions.add(new SortCondition(false, "getAge()"));
SortCondition e = new SortCondition(false, "name");
e.setSupportMap(true);
conditions.add(e);
conditions.add(new SortCondition(true, "birthday"));
conditions.add(new SortCondition(true, "salary1"));
conditions.add(new SortCondition(true, "id"));
long startTime = System.currentTimeMillis();
SortUtil.sort(list, conditions);
System.out.println(System.currentTimeMillis() - startTime);
print(list);
System.out.println("testSortUtilByConditions====getRegTime(), getAge(), name, birthday, salary1, id===");
}
@Test
public void testSortByArray() throws ParseException {
Person[] arrays = list.toArray(new Person[] {});
// Integer id, String name, int age, boolean isStatus, long salary, Double salary1, Date birthday
System.out.println("testSortByArray======regTime, birthday, age, salary1, id===========");
long startTime = System.currentTimeMillis();
String[] methodNames = new String[] { "regTime", "birthday", "age", "salary1", "id" };
SortUtil.sort(arrays, new boolean[] { false, false, true }, methodNames);
System.out.println(System.currentTimeMillis() - startTime);
print(arrays);
System.out.println("testSortByArray======regTime, birthday, age, salary1, id===========");
}
private void print(List<Person> list) {
if (!isPrintResult) {
return;
}
for (Person person : list) {
System.out.println(person);
}
}
private void print(Person[] arrays) {
if (!isPrintResult) {
return;
}
for (Person person : arrays) {
System.out.println(person);
}
}
}