一、说明
给一个list排序,我们这里用的是collections中的sort()方法;
源代码(可以直接粘贴,替换掉其中某些元素):
@RequiresPermissions("position:view")
@RequestMapping(value="tree",method = RequestMethod.GET)
//将数据库的菜单表做排序处理,排序考虑到了层级关系
public Result<Set<Position>> findTree(Position searchVo) throws Exception {
List<Position> list = positionService.selectByProperties(searchVo);
Collections.sort(list, new Comparator<Position>() {
@Override
public int compare(Position o1, Position o2) {
return o1.getSort()-o2.getSort();
}
});
Set<Position> returnSet = new LinkedHashSet<>();
//递归调用 树形结构
getOrderListByParentId(returnSet,list,null);
return new ResultBuilder<Set<Position>>().data(returnSet).build();
}
二、解析
sort方法:
public static <T> void sort(List<T> list, Comparator<? super T> c) {
list.sort(c);
}
①传入的第一个参数是一个list集合,类型为T类型,这里的T类型是泛指;
②传入一个比较器的尖括号内要传入类型;
③接下来要重写比较器中的比较方法:compare方法,返回值是一个int类型的差;
@Override
public int compare(Position o1, Position o2) {
return o1.getSort()-o2.getSort();
}
上面的结果是顺序排列,如果调换return o2和o1的位置,则为倒叙;
④注意:这里的实体类,一定要实现比较方法:implements Comparable<Position>
尖括号内是实体类自己;
然后实体类里会重写比较方法:compareTo:
@Override
public int compareTo(Position o) {
if (o.getSort() != null && this.getSort() != null) {
return this.getSort() - o.getSort();
}
return 0;
}