Comparator是一个函数式接口,功能主要用于自定义排序规则,至于其它功能这里不记录,只记录下如何排序:
目前常用的排序方法:
数组排序、集合排序、集合转化为流排序
public class sortTest {
public static void main(String[] args) {
List<User> usersList = new ArrayList<>(){
{
for(int i = 0; i < 3; i ++) {
add(new User("lxc"+i, 20+i));
}
}
};
// 方式一 -> 数组工具类:Arrays.sort(T[] a, Comparator<? super T> c);
// 方式二 -> 集合的stream()方法:new ArrayList<>().stream().sorted(Comparator<? super T> comparator);
// 方式二 -> 集合工具类:
Collections.sort(usersList, new Comparator<User>() {
@Override
public int compare(User o1, User o2) {
// 倒序
return o2.getAge() - o1.getAge();
// 正序
return o1.getAge() - o2.getAge();
}
});
System.out.println(JSON.toJSONString(usersList, SerializerFeature.PrettyFormat));
}
}
实际开发中的案例:
若依前后端分离框架中,前台excel模板下载时,后端其实是新建了一个excel,然后把数据填充进去, 内部原理:通过反射来获取要导出的实体类中的每一个字段,添加到list列表中,循环遍历list列表,把带有@Excel注解的字段和@Excel注解中的属性添加到 一个Object[]数组中去,然后把Object[] 数组添加到fields 列表中去,最后把列表转化为流,进行排序。