泛型ObjectComparator实现ArrayList自定义排序
在"ArrayList排序.txt"文件中,我们探讨了如何使用Java编程语言中的Comparator接口对ArrayList进行自定义排序。该内容主要关注于一个名为`ObjectComparator`的类,它是一个泛型类,专门用于根据对象的属性值进行排序。类中涉及的关键知识点有以下几点: 1. **接口实现**: `ObjectComparator`实现了`Comparator`接口,这是一个Java集合框架中的接口,主要用于提供自定义的排序逻辑。通过这个接口,用户可以控制如何比较列表中的元素。 2. **泛型使用**: 类中使用了泛型`<T>`,表示这个类可以适用于任何类型的对象。`T`代表待比较的对象类型,如List<String>或List<Integer>等。 3. **构造函数参数**: 构造函数接受三个参数:`Class<?> T`(表示待比较对象的类型)、`String P`(表示要比较的属性名称)和`String D`(表示排序方式,如ASC或DESC)。这些参数用于实例化`ObjectComparator`对象,并设置比较属性和顺序。 4. **字段和方法**: - `Field[] fields = T.getDeclaredFields();`:获取指定类(T)的所有字段,以便后续访问属性值。 - `Method m = T.getMethod(P);`:尝试根据属性名获取getter方法,以便在`compare()`方法中调用,获取属性值。 5. **比较逻辑**: 在`compare()`方法中,首先将传入的对象转换为`T`类型的引用,然后获取并设置每个对象的指定属性值。如果排序方式为DESC(降序),则在比较时反转返回值的顺序,确保正确地实现降序排列。 6. **异常处理**: 使用try-catch语句结构处理可能出现的`NoSuchMethodException`异常,这是在尝试调用不存在的方法时抛出的,例如当属性名对应的getter方法不存在时。 7. **日志记录**: 类定义了静态的日志对象`log`,使用Apache Commons Logging库,用于在执行操作时记录日志信息,增强了代码的可维护性和调试能力。 通过`ObjectComparator`类,你可以方便地在各种场景下对ArrayList进行定制化的排序操作,这在数据处理、报表生成、数据分析等场景中非常有用。
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Comparator;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.itextpdf.text.log.Logger;
@SuppressWarnings("rawtypes")
public class ObjectComparator<T> implements Comparator { //实现 Comparator 接口
private static final Log log = LogFactory.getLog(ObjectComparator.class);
private Class<?> T; // 利用泛型 Class<?> 承接比较对象
private String P; //接收比较的对象属性
private String D; //比较方式 DESC ESC
public <T> ObjectComparator( Class<?> T ,String P,String D){
this.T= T;
this.P=P;
this.D=D;
}
@Override
public int compare(Object o1, Object o2) { //实现方法compare 利用 Object 实现范话
// TODO Auto-generated method stub
T t1;
下载后可阅读完整内容,剩余3页未读,立即下载
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- OptiX传输试题与SDH基础知识
- C++Builder函数详解与应用
- Linux shell (bash) 文件与字符串比较运算符详解
- Adam Gawne-Cain解读英文版WKT格式与常见投影标准
- dos命令详解:基础操作与网络测试必备
- Windows 蓝屏代码解析与处理指南
- PSoC CY8C24533在电动自行车控制器设计中的应用
- PHP整合FCKeditor网页编辑器教程
- Java Swing计算器源码示例:初学者入门教程
- Eclipse平台上的可视化开发:使用VEP与SWT
- 软件工程CASE工具实践指南
- AIX LVM详解:网络存储架构与管理
- 递归算法解析:文件系统、XML与树图
- 使用Struts2与MySQL构建Web登录验证教程
- PHP5 CLI模式:用PHP编写Shell脚本教程
- MyBatis与Spring完美整合:1.0.0-RC3详解