对List分别按每个字段排序
场景
工作中需要对一个列表分别按每个字段排序,效果如下
点击每个字段旁边的小三角,会先升序排序;再次点击会降序排序
方案
- 前端做: 数据已经到前端了,所以可以按要求排序
- 后端做,后端从分页查出来后,进行按字段排序
这里只说下后端的方案:
根本的方法还是重写类的 compare() 方法。 难点在传一个字段,按这个字段重写。 所以计划以这个字段名为参数,传递。 compare() 中
sort(List list, String fieldLabel, Boolean asc) {
Collections.sort(list, new Comparator<T>() {
@Override
public int compare(T o1, T o2) {
try {
int result = contrast(o1, o2, fieldLabel); //按不同的类型,进行不同的比较
if (result > 0) {
if (asc) {
return 1;
} else {
return -1;
}
} else if (result < 0) {
if (asc) {
return -1;
} else {
return 1;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return 0;
}
});
}
整体代码如下
package com.shuidihuzhu.cs.workorder.utils;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java