直接贴代码:
1.
@RequestMapping(value = "/list", method = RequestMethod.POST)
public JsonResult list() {
List<Permit> list = permitService.getList();
Collections.sort(list, new Comparator(){
@Override
public int compare(Object o1, Object o2) {
Permit permit1=(Permit)o1;
Permit permit2=(Permit)o2;
return permit1.getName().compareTo(permit2.getName());
}
});
Map<String, Object> map = new HashMap<String,Object>();
map.put("permits", list);
return new JsonResult(ResultCode.SUCCESS, "permit list success", map);
}
2.
@RequestMapping(value = "/byMember", method = RequestMethod.POST)
public JsonResult byMember(@RequestBody Map<String,Object> param) {
if (param == null
|| param.get("usercode") == null
|| StringUtils.isEmpty(param.get("usercode").toString())) {
return new JsonResult(ResultCode.PARAMS_ERROR,"param error");
}
String usercode = param.get("usercode").toString();
List<Permit> list = permitService.getList();
List<Map<String, Object>> resultList = new ArrayList<>();
list.forEach(s -> {
Map<String, Object> map = new HashMap<>();
if (s.getOwner().contains(usercode) || "0".equals(s.getStatus())) {
map.put("permitCode", s.getCode().toString());
map.put("permitName", s.getName());
map.put("permitHave", "1");
} else {
map.put("permitCode", s.getCode().toString());
map.put("permitName", s.getName());
map.put("permitHave", "0");
}
resultList.add(map);
});
Collections.sort(resultList, new Comparator<Map<String, Object>>() {
@Override
public int compare(Map<String, Object> o1, Map<String, Object> o2) {
return o1.get("permitName").toString().compareTo(o2.get("permitName").toString());
}
});
Map < String, Object > map = new HashMap<String, Object>();
map.put("permits", resultList);
return new JsonResult(ResultCode.SUCCESS, "by member success", map);
}
3.
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 测试用实体类
* @author acer
*
*/
public class Member implements Comparable<Member>{
// 格式化日期用
private static final SimpleDateFormat MY_SDF = new SimpleDateFormat(
"yyyy-MM-dd");
// 几个属性
private int id;
private String username;
private int level;
private Date birthday;
// 构造函数
public Member(int id, String username, int level, String birthday) throws Exception {
this.id = id;
this.username = username;
this.level = level;
this.birthday = new Date(MY_SDF.parse(birthday).getTime());
}
// Getters
public String getUsername() {
return username;
}
public int getLevel() {
return level;
}
public Date getBirthday() {
return birthday;
}
// 返回打印用
@Override
public String toString() {
return id + "|" + username + "|" + level + "|" + MY_SDF.format(birthday);
}
// 注意:如果使用MySortList类,则此方法不再需要。因为此方法是提供给Collections.sort方法使用的。
@Override
public int compareTo(Member m) {
// 只能对一个字段做比较,如果做整个对象的比较就实现不了按指定字段排序了。
return this.getUsername().compareTo(m.getUsername());
}
}
import java.util.*;
import java.lang.reflect.Method;
import java.lang.reflect.InvocationTargetException;
/**
* 这是一个自定义排序的类,专门针对列表(List)中的数据进行排序;可按指定方法进行。
* 目前实现对字符串(String)、日期(Date)、整型(Integer)等三种对象进行排序。
* @author
*
* @param <E>
*/
public class MySortList<E> {
/**
* 对列表中的数据按指定字段进行排序。要求类必须有相关的方法返回字符串、整型、日期等值以进行比较。
* @param list
* @param method
* @param reverseFlag
*/
public void sortByMethod(List<E> list, final String method,
final boolean reverseFlag) {
Collections.sort(list, new Comparator<Object>() {
@SuppressWarnings("unchecked")
public int compare(Object arg1, Object arg2) {
int result = 0;
try {
Method m1 = ((E) arg1).getClass().getMethod(method, null);
Method m2 = ((E) arg2).getClass().getMethod(method, null);
Object obj1 = m1.invoke(((E)arg1), null);
Object obj2 = m2.invoke(((E)arg2), null);
if(obj1 instanceof String) {
// 字符串
result = obj1.toString().compareTo(obj2.toString());
}else if(obj1 instanceof Date) {
// 日期
long l = ((Date)obj1).getTime() - ((Date)obj2).getTime();
if(l > 0) {
result = 1;
}else if(l < 0) {
result = -1;
}else {
result = 0;
}
}else if(obj1 instanceof Integer) {
// 整型(Method的返回参数可以是int的,因为JDK1.5之后,Integer与int可以自动转换了)
result = (Integer)obj1 - (Integer)obj2;
}else {
// 目前尚不支持的对象,直接转换为String,然后比较,后果未知
result = obj1.toString().compareTo(obj2.toString());
System.err.println("MySortList.sortByMethod方法接受到不可识别的对象类型,转换为字符串后比较返回...");
}
if (reverseFlag) {
// 倒序
result = -result;
}
} catch (NoSuchMethodException nsme) {
nsme.printStackTrace();
} catch (IllegalAccessException iae) {
iae.printStackTrace();
} catch (InvocationTargetException ite) {
ite.printStackTrace();
}
return result;
}
});
}
// 测试函数
public static void main(String[] args) throws Exception {
// 生成自定义对象,然后对它按照指定字段排序
List<Member> listMember = new ArrayList<Member>();
listMember.add(new Member(1, "wm123", 3, "1992-12-01"));
listMember.add(new Member(2, "a234", 8, "1995-12-01"));
listMember.add(new Member(3, "m456", 12, "1990-12-01"));
System.out.println("Member当前顺序...");
System.out.println(listMember);
// 方式一排序输出
System.out.println("Member默认排序(用自带的compareTo方法)后...");
Collections.sort(listMember);
System.out.println(listMember);
System.out.println("Member倒序(用自带的compareTo方法)后...");
Collections.sort(listMember, Collections.reverseOrder());
System.out.println(listMember);
// 方式二排序输出
MySortList<Member> msList = new MySortList<Member>();
msList.sortByMethod(listMember, "getUsername", false);
System.out.println("Member按字段用户名排序后...");
System.out.println(listMember);
msList.sortByMethod(listMember, "getLevel", false);
System.out.println("Member按字段级别排序后...");
System.out.println(listMember);
msList.sortByMethod(listMember, "getBirthday", true);
System.out.println("Member按字段出生日期倒序后...");
System.out.println(listMember);
}
}