求一个小算法。
用户角色ID 角色对应权限数数量
1 47
2 22
3 6
4 17
5 33
. .
. .
. .
. .
根据角色对应的权限数量的多少来给角色排个序
比如角色1,它有47个权限,那么角色1当然最大,然后角色5,有33个权限,那么它就排在老二。角色2有22个权限,那么它是老三。
通过对权限数量的排序给角色ID排个序,我再根据角色ID查出角色中文名返回给前台,让用户对哪个角色的权力大有个印象。
我想了一会还真没什么好办法,不知道CSDN的大神们有没有高招。拜谢。
用户角色ID 角色对应权限数数量
1 47
2 22
3 6
4 17
5 33
. .
. .
. .
. .
根据角色对应的权限数量的多少来给角色排个序
比如角色1,它有47个权限,那么角色1当然最大,然后角色5,有33个权限,那么它就排在老二。角色2有22个权限,那么它是老三。
通过对权限数量的排序给角色ID排个序,我再根据角色ID查出角色中文名返回给前台,让用户对哪个角色的权力大有个印象。
我想了一会还真没什么好办法,不知道CSDN的大神们有没有高招。拜谢。
解决方案 »
- 求救,为什么会出现这个错误??
- 匿名内部类问题求助
- List与hashMap遍历的乱序问题
- 算法
- 关于eclipse运行的问题
- 在Java中怎么实现类似管家婆中产品选择使用键盘操作的目的?
- 请教高手!!用什么东西可以很好的压缩视频文件啊?
- JB8出问题,请大家救命(在线等)
- SOS,比如我现在有两个java的源文件,在JB中建立一个PROJECT把这两个文件加入然后运行主java文件,但提示出错!
- java management API(jmAPI) 是什么?
- D:\track\nbproject\build-impl.xml:679: 尚未部署该模块
- 如何提高 删除 速度 大家说说白 做过的给点建议
角色的权限也放大另一个数组
这2个数组长度一样,同一个索引下存的是 角色ID 和 权限
给权限排序的时候 角色ID对应的索引也跟着同步变化不就可以了
但是我要是就用java排呢?因为我感觉不是很复杂,但是自己却没想出来感觉不舒服。就是想研究一下。
public static void main(String[] args) {
List roles = new ArrayList();
roles.add(new Role(1, 47));
roles.add(new Role(2, 22));
roles.add(new Role(3, 6));
roles.add(new Role(4, 17));
roles.add(new Role(5, 33));
Collections.sort(roles); //排序
for ( Object r : roles)
System.out.println(((Role)r).getId());
}
}
class Role implements Comparable{
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
private int weight;
public Role (int id, int weight){
this.id = id;
this.weight = weight;
}
@Override
public int compareTo(Object o) { //根据权重排序
return Integer.signum(((Role)o).weight - weight);
}
}
int j;
int t;
//角色对应权限数数量
int[] a={47,22,6,17,33};
//用户角色ID
int[] b={1,2,3,4,5};
for(i=0;i<a.length-1;i++)
{
for(j=i+1;j<a.length;j++)
{
if(a[i]<a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
t=b[i];
b[i]=b[j];
b[j]=t;
}
}
}
for(i=0;i<a.length;i++)
{
System.out.println(a[i]+" "+b[i]);
}
public String getArgs() {
return fieldName;
} public void setArgs(String args) {
this.fieldName = args;
} public OrderBy(String str){
fieldName = str;
}
public OrderBy(){
System.out.println("OrderBy done...");
}
public int compare(T o1, T o2) {
// TODO Auto-generated method stub
System.out.println("compare done...");
Object obj1 = this.invokeMethod(o1, fieldName, new Object[0]);
Object obj2 = this.invokeMethod(o2, fieldName, new Object[0]);
System.out.println(obj1.toString() + " " + obj2.toString());
if(obj1 == null || obj2 == null){
return 0;
}else{
return obj1.toString().compareTo(obj2.toString());
}
}
@SuppressWarnings("unchecked")
private Object invokeMethod(T obj,String methodName, Object[] args){
Object object = null;
@SuppressWarnings("rawtypes")
Class ownerClass = obj.getClass();
@SuppressWarnings("rawtypes")
Class[] argsClass = new Class[args.length];
for(int i = 0, j = args.length; i < j; i++) {
argsClass[i] = args[i].getClass();
}
Method method;
try {
methodName = "get" + methodName;
method = ownerClass.getMethod(methodName, argsClass);
object = method.invoke(obj, args);
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
}
return object;
}
}
可对类的字段进行排序,返回一个list。注意传入的str是你要排序的属性,get +str等于你的get方法的名字。例如根据你的id排序,对应的get方法为getId,所以要传入Id,这样写OrederBy<User> ob = new OrederBy<User>("Id")。这样使用Collections.sort(list, ob);其中list是你需要排序的列表。
但是5楼的写法比较“Java”,我非常喜欢。
总之谢谢大家了,我也不为别的,就是交流一下。