List排序方法

public class ListOrder {

public enum Order {
DESC,
ASC;
}

/**
* 此方法List中存放的数据为Map类型适用
* @param order
* @param data
* @param sortField
*/
public static void sort(final Order order, List<?> data, final String sortField) {
if (null == order || null == sortField) {
//此处抛出异常
}
ListOrder.sort(data, Arrays.asList(order), Arrays.asList(sortField));
}

public static void sort(List<?> data, final List<Order> orders, final List<String> sortFields) {
if (null == orders || null == sortFields) {
//此处抛出异常
}
if (orders.size() != sortFields.size()) {
//此处抛出异常
}
Collections.sort(data, new Comparator<Object>() {
@SuppressWarnings("unchecked")
@Override
public int compare(Object o1, Object o2) {
for (int i = 0 ; i < sortFields.size() ; i ++) {
String val1 = (String) ((Map<String, Object>)o1).get(sortFields.get(i));
String val2 = (String) ((Map<String, Object>)o2).get(sortFields.get(i));
if (val1.equals(val2)) {
continue;
} else {
return _sortBigInteger(val1, val2, orders.get(i));
}
}

return 0;
}
});
}

/**
* 此方法List中存放String型适用
* @param data
* @param order
*/
public static void sort(List<?> data, final Order order) {
if (null == order) {
throw new IllegalAccessError("\n order should not be null");
}
Collections.sort(data, new Comparator<Object>() {
@Override
public int compare(Object o1, Object o2) {

String val1 = (String) o1;
String val2 = (String) o2;
return _sortBigInteger(val1, val2, order);
}
});
}

private static int _sortBigInteger(String val1, String val2, Order order) {
BigInteger int1 = new BigInteger(val1);
BigInteger int2 = new BigInteger(val2);
if (order.equals(Order.DESC)) {
return int2.compareTo(int1);
}else if(order.equals(Order.ASC)){
return int1.compareTo(int2);
}
return 0;
}
}

posted @ 2015-11-05 10:43  lele88lala  阅读(202)  评论(0编辑  收藏  举报