`
wangyanlong0107
  • 浏览: 495135 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

用反射来排序

阅读更多

public static String getIdString(String id){

 String mehodStr = null;

 if(id!=null){

  char oldChar = id.charAt(0);

  char newChar = (oldChar + "").toUpperCase().charAt(0);

  String temp =newChar + id.substring(1);

  mehodStr = "get" + temp;

 }

 return mehodStr;

}

 

 

 

//排序

final String sortColumn = (String)searchConditions.getCondition("sortColumn");

final String sortOrder = (String)searchConditions.getCondition("sortOrder");

Collections.sort(list, new Comparator(){

public int compare(Object o1, Object o2) {

try {

//得到get方法名

String getMethodName = StringUtil.getIdString(sortColumn);

Class clazz = o1.getClass();

//get方法

Method m3 = clazz.getDeclaredMethod(getMethodName);

//返回值类型

Class returnType  =  m3.getReturnType();

//根据返回值类型进行比较

if(returnType == String.class ){

//调用get方法得到field

String field1 = (String)m3.invoke(o1);

String field2 = (String)m3.invoke(o2);

if(field1 == null)

field1 = "";

if(field2 == null)

field2 = "";

if(sortOrder.equals("asc")){

return field1.compareTo(field2);

}else

return field2.compareTo(field1);

}else if(returnType == Date.class){

Date field1 = (Date)m3.invoke(o1);

Date field2 = (Date)m3.invoke(o2);

if(field1 == null)

field1 = new Date();

if(field2 == null)

field2 = new Date();

if(sortOrder.equals("asc")){

return field1.compareTo(field2);

}else

return field2.compareTo(field1);

}else if(returnType == long.class){

long field1 = (Long)m3.invoke(o1);

long field2 = (Long)m3.invoke(o2);

if(sortOrder.equals("asc")){

return (int)(field1-field2);

}else

return (int)(field2-field1);

}else if(returnType == ResumeStatusType.class){

ResumeStatusType field1 = (ResumeStatusType)m3.invoke(o1);

ResumeStatusType field2 = (ResumeStatusType)m3.invoke(o2);

if(field1 == null)

field1 =  ResumeStatusType.getInstance("1");

if(field2 == null)

field2 = ResumeStatusType.getInstance("1");

if(sortOrder.equals("asc")){

return field1.getCode().compareTo(field2.getCode());

}else

return field2.getCode().compareTo(field1.getCode());

}

} catch (SecurityException e) {

 

       e.printStackTrace();  

   

} catch (NoSuchMethodException e) {

 

       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();  

   

}

return 0;

}});

//排序end

分享到:
评论

相关推荐

    java中list排序

    我们可以使用泛型来指定排序的字段,然后使用反射机制来动态地取得方法。 例如,我们可以使用以下代码来对 UserInfo 对象的 userId 字段进行排序: Java 代码 SortList<UserInfo> sortList = new SortList(); sort...

    java语言多种排序

    设计一个负责排序的程序包,实现多种排序算法,至少包括插入排序、冒泡排序和快速排序算法。 要求: 1.可以对任何简单类型和任意对象进行排序 2.可以支持升序、降序、字典排序等多种顺序要求 3.可以随意增加排序算法...

    在linq查询中使用反射

    - 动态过滤(Where):如果过滤条件在编译时未知,可以使用反射创建表达式树来动态地构造这些条件。 - 动态排序(OrderBy/ThenBy):根据运行时的需要,你可以动态指定排序依据。 - 动态聚合(GroupBy/Sum/Average)...

    分页组件+反射分页组件+反射分页组件+反射

    4. **扩展性**:当新的需求出现时,例如需要支持复杂的排序规则或者分组统计,反射可以使我们在不修改原有代码的情况下,通过新增或修改类来实现这些功能。 5. **性能优化**:反射可以用于在运行时判断是否启用某些...

    Java 类自定义排序

    Java 中的自定义排序是指在编写 Java 程序时,通过实现 Comparable 接口来实现对对象的排序。在本节中,我们将通过一个实体类的示例来演示如何实现自定义排序。 自定义排序的必要性 在 Java 程序中,排序是非常...

    Gridview点击列头排序 .doc

    总的来说,实现GridView点击列头排序涉及的关键点包括:开启`AllowSorting`属性,监听`OnSorting`事件,使用反射获取属性值,以及通过`ViewState`保存和更新排序状态。理解这些概念和技术可以帮助你有效地在ASP.NET...

    List数据字段排序不关注数据库,直接排序

    - 使用反射调用对象的方法获取属性值。 - 根据属性值的类型(字符串、整型、浮点型)进行相应的比较。 5. **辅助方法**: - `objectToString()`: 将对象转换为字符串。 - `objectToInt()`: 将对象转换为整型。 ...

    反射和映射实例

    例如,在配置文件处理中,可以使用反射动态加载类并实例化,然后利用Map存储配置项,通过键来动态调用反射方法。此外,动态代理技术(如Java的Proxy类)也常结合反射和映射,根据接收到的方法调用来执行相应的逻辑。...

    List 对象属性排序

    为了解决这一问题,可以设计一个通用的工具类来实现基于对象属性的排序功能,无需在实体类中重写排序方法,从而提高开发效率。 #### 二、核心概念与技术 1. **Comparator**:是Java中用于比较两个对象的接口,通过...

    在ASP.NET 2.0中操作数据:DataList和Repeater数据排序(三)

    在ASP.NET 2.0中操作数据:DataList和Repeater数据排序(三)

    Java期末复习——枚举与反射机制

    总结来说,枚举提供了一种安全的方式来定义一组常量,而反射机制则赋予了Java程序在运行时探索和操作类的能力,这两者都是Java强大特性的体现。在实际开发中,理解并合理运用枚举和反射,能够提升代码的灵活性和可...

    蓝牙测距并进行排序

    在这个场景中,我们关注的是如何利用蓝牙(Bluetooth)的信号强度指示符(RSSI,Received Signal Strength Indicator)来估算距离,并对多个蓝牙设备按照从近到远的顺序进行排序。这在物联网(IoT)、智能家居、智能...

    各种排序算法java实现

    标题中的“各种排序算法java实现”指的是在Java编程...总结来说,这个压缩包内容可能涵盖了多种排序算法的Java实现,以及一个关于Java反射的实例,对于学习和理解Java编程、数据结构以及程序设计原理具有很高的价值。

    java注解、java反射机制 jdbc 封装

    例如,你可以使用反射来获取类的字段信息,然后动态生成对应的SET和WHERE子句,以此实现通用的CRUD(Create、Read、Update、Delete)操作。 JDBC是Java连接数据库的标准API,提供了与各种数据库交互的能力。通过...

    实现的go语言的结构体排序

    用go语言实现的结构体排序,使用go的反射包(reflect),实现结构体按指定字段排序,字段类型目前支持int,int64,string,方便扩展任意基本类型,使用直接导入包,然后调用sortStruct(structArr, 'sorft_name', ...

    DataGridView点绑定List击列头排序

    由于默认情况下,`DataGridView`仅在绑定到支持排序的数据源(如`DataTable`或SQL查询结果)时提供排序功能,因此当绑定到`List<T>`时,我们需要自定义代码来实现这个功能。 首先,我们需要创建一个帮助类或者扩展...

    java反射耗时测试案例解析

    Java 反射耗时测试案例解析 Java 反射机制是 Java 语言中的一种强大功能,它允许开发者在运行...因此,在实际开发中,需要根据实际情况选择是否使用反射机制,并且需要尽量减少反射机制的使用频率,以提高系统的性能。

    运用注解改变反射之后类属性的顺序

    在这个例子中,我们将创建一个自定义注解,然后在类的属性上使用这个注解,以指定它们在反射时的顺序。 首先,我们需要定义一个注解,比如`@Order`: ```java import java.lang.annotation.*; @Retention...

    c#使用反射调用类型成员示例

    在实际的工作中直接使用反射的机会比较少,有印象的就是一次自己做的WinForms小工具的时候利用反射来动态获取窗体上的每个控件,并且为必要的控件动态添加注册事件。因为刚入职新公司,为了更快的了解公司的业务、和...

    List对象排序通用方法

    // 使用反射获取对象的属性值 return obj.getClass().getMethod("get" + propertyName.substring(0, 1).toUpperCase() + propertyName.substring(1)).invoke(obj); } catch (Exception e) { throw new ...

Global site tag (gtag.js) - Google Analytics