`
Mrpublic
  • 浏览: 16434 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

对某一个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.传的参 必须为 存在的属性 且每个参首字大写 没有做异常处理 呵呵

------先记录在这儿 。。。。
1
0
分享到:
评论

相关推荐

    在Java 8中将List转换为Map对象方法

    在Java 8中,将List转换为Map对象是一种非常实用的技术,特别是在处理大规模数据时非常有用。本文将详细介绍在Java 8中将List转换为Map对象的方法,并提供了多种实现方式。 首先,我们需要明确Map的key是什么?在这...

    C# List OrderBy 动态多字段排序

    在上述代码中,`p =&gt; p.Age` 就是一个Lambda表达式,它告诉`OrderBy`按Person对象的Age属性进行排序。 然而,当我们需要根据多个字段进行排序时,可以连续调用`ThenBy`方法。例如,先按年龄排序,再按姓名排序: `...

    c#使用bindlist绑定datagridview不能自动排序的解决类

    为了解决`BindingList&lt;T&gt;`不支持自动排序的问题,我们可以创建一个自定义的`SortableBindingList&lt;T&gt;`类,继承自`BindingList&lt;T&gt;`,并在其中重写相关的成员方法以支持排序功能。 ```csharp public class ...

    CSharp 4.0 .Net Framework V4.0 List《T》类

    - Equals(Object):比较当前 List&lt;T&gt; 是否与指定对象相等。 - Find(Predicate&lt;T&gt;):查找符合指定条件的第一个元素。 - FindAll(Predicate&lt;T&gt;):查找符合指定条件的所有元素。 - FindIndex(Predicate&lt;T&gt;):返回...

    C#编程经验技巧宝典

    72&lt;br&gt;&lt;br&gt;0102 将字符串首字母转换大写 72&lt;br&gt;&lt;br&gt;0103 如何进行字节数组和字符串的相互转换 72&lt;br&gt;&lt;br&gt;0104 如何把一个按空格分割的字符串存储在一个ArrayList数组中 73&lt;br&gt;&lt;br&gt;4.2 获取字符串信息 73&lt;br&gt;...

    List 对象属性排序

    ### List对象属性排序知识点 #### 一、概述 在Java编程中,经常需要对`List`集合中的对象按照特定属性进行排序。传统的方法是在每个实体类中重写`Comparable`接口或提供比较器(`Comparator`),这不仅增加了代码...

    java版本List中对象多属性排序.rar

    在Java编程中,对List集合中的对象进行多属性排序是一项常见的任务。这通常涉及到自定义比较逻辑,以满足复杂的数据排序需求。在这个“java版本List中对象多属性排序.rar”压缩包中,我们可能找到了一个关于如何在...

    List和Treemap排序实例及效率对比

    本资源提供了List&lt;Object&gt;对对象中的属性和TreeMap&lt;Integer, String&gt;对键值排序,并针对100w条数据排序,对比List&lt;Object&gt;和TreeMap&lt;Integer, String&gt;排序的效率。个人认为排序效率对比可以相信,但也可能存在不科学...

    实体类的简单基础应用 List 与 JSON 互相转换

    `adults`现在是一个只包含年龄大于18岁的学生的IQueryable&lt;Student&gt;,你可以进一步对它进行操作,比如筛选、排序或分组。 在提供的文件列表中,`ModelToJson.sln`是解决方案文件,它包含了项目的所有相关信息。`...

    hibernate 教程

    对结果排序&lt;br&gt;12.4. 关联(Associations)&lt;br&gt;12.5. 动态关联对象获取(Dynamic association fetching)&lt;br&gt;12.6. 根据示例查询(Example queries)&lt;br&gt;13. 原生SQL查询&lt;br&gt;13.1. 创建一个基于SQL的Query&lt;br&gt;13.2....

    hibernate

    对结果排序&lt;br&gt;12.4. 关联(Associations)&lt;br&gt;12.5. 动态关联对象获取(Dynamic association fetching)&lt;br&gt;12.6. 根据示例查询(Example queries)&lt;br&gt;13. 原生SQL查询&lt;br&gt;13.1. 创建一个基于SQL的Query&lt;br&gt;13.2....

    Java中List集合对象去重及按属性去重的8种方法

    对于包含自定义对象的List,可以实现一个比较器(Comparator)来根据对象的特定属性进行去重。 ```java @Test void testRemoveByAttribute1() { List&lt;Player&gt; uniquePlayers = playerList.stream() .distinct...

    DataSet 转化为List的通用方法

    它类似于关系数据库,包含多个`DataTable`对象,每个`DataTable`代表一个数据表。 - **List**:是一种动态数组,可以存储任意类型的对象,并提供灵活的数据访问和管理功能。`List`在.NET Framework中是`System....

    根据某个属性对List中的所有对象分组,该属性值相同的对象分到一个组

    本问题中提到的情况就是如何根据对象的一个属性值对List中的对象进行分组,以便每个组包含具有相同属性值的对象。这种操作在处理集合数据时非常常见,例如在报表生成、数据分析或数据显示优化等场景。 首先,这个...

    AIC的Java课程1-6章

    第3版 机械工业出版社&lt;br&gt; 教学内容和要求&lt;br&gt;知识点 重要程度 使用频度 难度&lt;br&gt;Java 入门 高 中 易&lt;br&gt;变量和运算符 高 高 中&lt;br&gt;控制结构...br&gt;IO和串行化 高 中 难&lt;br&gt;知识点 重要程度 使用频度 难度&lt;br&gt;&lt;br&gt;第1章...

    基于ArrayList的对象多属性值排序

    本主题将深入探讨如何对ArrayList中的对象按照多个属性进行排序。 首先,我们来看`Student.java`类,它通常会包含一个或多个属性,比如学生的姓名(name)、学号(id)或其他信息。例如: ```java public class ...

    Java 代码实现案例

    List&lt;Object[]&gt; matchingRows = new ArrayList&lt;&gt;(); for (List&lt;Object&gt; row : rows) { if (row.get(columns.indexOf(columnName)).equals(value)) { matchingRows.add(row.toArray(new Object[0])); } } ...

    Java对List对象进行排序_.docx

    在Java编程中,对List对象进行排序是一个常见的需求,尤其是在处理数据集合时。Java提供了一个便捷的方法`Collections.sort()`,可以直接对实现了`Comparable`接口的List进行排序。然而,当需要根据对象内部的某个...

    .net属性数组排序.rar

    例如,如果你有一个GridView控件,需要根据数据源中对象的某个属性进行排序,你可以在数据绑定前对数据源进行排序,或者在GridView的Sorting事件中执行排序。 以下是一个ASP.NET源码示例,展示了如何在GridView控件...

    List对象排序通用方法[参考].pdf

    然而,如果需要对多个字段(如`username`, `birthDate`, `age`)进行排序,按照上面的方式,每次都需要创建一个新的`Comparator`,这显然不是一种高效的做法。为了解决这个问题,我们可以创建一个通用的排序方法,...

Global site tag (gtag.js) - Google Analytics