网页学习体会

  • 首页
  • 个人博客
您的位置: 首页  >  IT文章  >  对某一个List 对象进展按多属性条件排序

对某一个List 对象进展按多属性条件排序
分类: IT文章 • 2022-08-31 12:45:35
对某一个List<Object> 对象进行按多属性条件排序
今天有个同事问我 怎么对一个List<Object> 对象进行动态多条件排序。
由于他比较急用 所以先只对它的具体某个Object 对象进行排序 他的这个Object 就是从其它几个相关实体 获取所需要的属性组成的一个pOJObean

用了差不多一个小时 整理一个思路 并写了下来; (当然存在一些问题)

我先说说我的思路: 就是利用java的反射机制 来获取属性后 再比较

(如果朋友们有其它方法请留言分享,有帮改进 也请留言,谢谢先:)
————————————————————————————————————————
/**
* 利用反射机制多条件排序
* 主要是针对字串排序
* 注 字串首字母大写
            *@param  list
* @param pros TestA的属性
* @return
*/
private void getSortedList(List<TestA> list,String[] pros)
      {

if(pros.length<=0)
return ;
for(int i=pros.length-1;i>=0;i--){
final String pro=pros[i];
try {
Collections.sort(list, new Comparator<TestA>() {
String name = "get" + pro;
Method method = TestA.class.getMethod(name,
new Class[] {});
public int compare(TestA a, TestA b) {
if (a == null || b == null) {
return 0;
} else {
int flag=0;
try {
Object as =  method.invoke(a, new Object[] {});
Object bs =  method.invoke(b, new Object[] {});
if(as==null&&bs==null)
return 0;
else if(as==null)
return -1;
else if(bs==null)
return 1;
else{
if(as instanceof String ){
String va=(String)as;
String vb=(String)bs;
flag= va.compareTo(vb);
}
if(as instanceof Date){
Date va=(Date)as;
Date vb=(Date)bs;
if(va.before(vb))
return -1;
else
return 1;
}
}
} catch (IllegalArgumentException e) {
System.out.println("e1");
} catch (IllegalAccessException e) {
System.out.println("e2");
} catch (InvocationTargetException e) {
System.out.println("e3");
}
return flag;
}
}
});
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

——————————————————————————————————————

呵呵 ,做起测试了一二次 OK,就让他交差了,应该还存在一些问题哈

目前问题:1. 如果 某一个比较属性对应的值为NULL, 这里的比较应该还要改善;
          2. 现在只做了对字串和时间比较,
         3. 还没有扩展,只针对 TestA 这个bean List 应该可以改为Object 或泛类
         4.传的参 必须为 存在的属性 且每个参首字大写 没有做异常处理 呵呵

------先记录在这儿 。。。。

相关推荐

  • 对某一个List 对象进展按多属性条件排序
  • 怎么使用Hibernate的saveOrUpdate修改一个对象,而不用考虑这个对象的属性
  • 请问一上UserControl的OnPaint重写的有关问题
    • 网站免责声明 网站地图 最新文章 用户隐私 版权申明
    本站所有数据收集于网络,如果侵犯到您的权益,请联系网站进行下架处理。   

    Copyright © 2018-2021   Powered By 网页学习体会    备案号:   粤ICP备20002247号