今天做项目遇到菜单栏每次刷新顺序都会发生变化,所以应项目需求,需要给菜单排序【这里最终达到的效果是先来居上(原理都一样)】以下是代码:
在网上查了一下,发现网上提供的方法大部分需要继承,也没有提供单独的方法给list进行排序,于是打算自己写一个util工具类,给list封装一个方法排序(该方法只是适应于一个list类型的可以修改T类型,达到多类排序【不封装完整泛型list排序的原因:我的项目里像这样的排序,只有一个,然后就是,封装完整的需要用到代理对象,比较麻烦,所以这里就不封装了】)
分析,根据数据库标识列id进行排序,或者使用其他标识列进行标识位置
原理:先将id取出放到一个单独的数组里,排好序,然后遍历list集合,比对排好序的id和集合里的id是否相等一次将集合中的对象放入新建的list集合中,最终得到集合与数组的顺序是一致的,如下是代码:
package com.wqk.util;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import com.wqk.entity.TbMenu;
public class ListSort {
//根据传递集合的id进行排序,这里只是真对该项目菜单进行排序,其他,原理相同
public static List<TbMenu> SortList(List<TbMenu> T)
{
List<TbMenu> lt=new ArrayList<TbMenu>();
//先将id取出以数组保存
int [] idzu=new int[T.size()];
for (int i=0;i<T.size();i++) {
idzu[i]=T.get(i).getId();
}
//将数组排序
Arrays.sort(idzu);
//开始排序
for (int i : idzu) {
for (TbMenu tm : T) {
if(i==tm.getId())
{
lt.add(tm);
}
}
}
//排序结束
return lt;
}
}
开始想使用冒泡排序的,结果想了下还是 Arrays.sort(arr);更好用
希望有所帮助:新年快乐!!!
=========================================补充
今天又再次用到list排序问题:于是重新写了一下排序这次使用了泛型,是泛泛的那种,看代码:
/**
* 排序:根据rid查询的菜单
* T:传递的泛型list里面的map集合相当于对象,
* sortname:为排序的字符key(该类将跟剧key进行排序)
* 前提保证sortname为int或Integer类型的Object获取值接类型
*/
public static List<Map<String, Object>> SortListMap(List<Map<String, Object>> T,String sortname)
{
List<Map<String, Object>> lt=new ArrayList<Map<String, Object>>();
//先将id取出以数组保存
int [] idzu=new int[T.size()];
for (int i=0;i<T.size();i++) {
idzu[i]=Integer.parseInt(String.valueOf(T.get(i).get(sortname)));
}
//将数组排序
Arrays.sort(idzu);
//开始排序
for (int i : idzu) {
for (Map<String, Object> tm : T) {
if(i==Integer.parseInt(String.valueOf(tm.get(sortname))))
{
lt.add(tm);
}
}
}
//排序结束
return lt;
}
调用代码:
List<Map<String, Object>> lmso=new ArrayList<Map<String, Object>>();
//利用排序类将该list集合排序至“先来居上”
ListSort.SortListMap(lmso, "id");
浏览到这里的朋友,不妨浏览一下该网站:原创地址:https://www.applebai.com/blog/details/39/20203281.html