/**
* 對列表中的數據按指定字段進行排序。要求類必須有相關的方法返回字符串、整型、日期等值以進行比較。
*
* @param list 集合
* @param sortName 需要排序的字段,目前支持 int String Date 類型
* @param reverseFlag false 正序 true 倒敘
*/
public static List<HashMap<String, Object>> sortByMethod(List<HashMap<String, Object>> list, String sortName, final boolean reverseFlag) {
//排序 倒序
if (StringUtil.isNotEmpty(list)) {
list.sort(new Comparator<Map<String, Object>>() {
@Override
public int compare(Map<String, Object> o1, Map<String, Object> o2) {
int result = 0;
Object o1Value = o1.get(sortName);
Object o2Value = o2.get(sortName);
if (o1Value instanceof String) {
// 字符串
result = o1Value.toString().compareTo(o2Value.toString());
} else if (o1Value instanceof Date) {
// 日期
long l = ((Date) o1Value).getTime() - ((Date) o2Value).getTime();
if (l > 0) {
result = 1;
} else if (l < 0) {
result = -1;
} else {
result = 0;
}
} else if (o1Value instanceof Integer) {
// 整型(Method的返回參數可以是int的,因為JDK1.5之后,Integer與int可以自動轉換了)
result = (Integer) o1Value - (Integer) o2Value;
} else if (o1Value instanceof Long) {
// 整型(Method的返回參數可以是Long的)
Long o11 = (Long) o1Value;
Long o12 = (Long) o2Value;
result = Integer.parseInt(o11.toString()) - Integer.parseInt(o12.toString());
} else {
System.err.println("MySortList.sortByMethod方法接受到不可識別的對象類型,轉換為字符串后比較返回...");
}
if (reverseFlag) {
// 倒序
result = -result;
}
return result;
}
});
}
return list;
}
案例 :
//聯表查詢工單數據 HashMap<String, Object> 實際上是個實體類,key = 數據表中的字段名,value = 字段名對應的值。比如 name,張三
List<HashMap<String, Object>> list = reportAllSqlMapper.selectAllSql(stringSql);
//給 list 排序,按照時間順序從小到大升序,注意 ticketId 在數據表中一定要有 ticket_id
sortByMethod(list, "ticketId", false);