利用ComparatorUtil按对象属性进行逆序/顺序排序
需积分: 50 103 浏览量
更新于2024-09-11
1
收藏 161KB DOCX 举报
在IT行业中,"根据对象属性将对象排序"是一个常见的需求,特别是在处理数据结构如列表(List)时。本篇内容主要围绕一个名为`ComparatorUtil`的工具类展开,该类位于`com.mpt.util`包下,用于实现对象的综合排序功能。
`ComparatorUtil`类提供了`sortByWhat`方法,该方法接受三个关键参数:需要排序的对象集合`List<E>`,排序依据的字符串数组`arr`,以及一个布尔值`flag`来指示排序方式,即是否为逆序排序。如果`flag`为`true`,则按照数组中的属性进行降序排列;如果`flag`为`false`,则按升序排列,这是默认行为。
方法内部首先创建了一个`ComparatorChain`实例`moInfoComparator`,这是一个可以连接多个比较器的工具,用于处理多级排序。接着,遍历`arr`数组,对于每个属性,根据`flag`的值决定添加到链表中的比较器是否带有`true`作为第二个参数,这表示倒序排列。然后,调用`Collections.sort()`方法,将`list`对象按照`moInfoComparator`进行排序。
在实际应用中,可以通过以下两种方式调用`sortByWhat`方法:
1. 明确指定排序顺序:
```java
List<E> list = ...; // 需要排序的列表
String[] arr = {"ipid", "charge"}; // 排序属性
boolean flag = true; // 逆序排序
ComparatorUtil.sortByWhat(list, arr, flag);
```
2. 默认为顺序排序:
```java
List<E> list = ...; // 需要排序的列表
String[] arr = {"ipid", "charge"}; // 排序属性
ComparatorUtil.sortByWhat(list, arr); // 由于flag默认为false,所以按升序排序
```
案例中提到的"根据ipid、charge排序"就是实际操作的例子,意味着先根据`ipid`字段进行排序,如果`ipid`相同,则进一步根据`charge`字段进行排序。这种灵活性使得开发者能够根据业务需求定制复杂的排序规则。
总结来说,`ComparatorUtil`类通过`ComparatorChain`机制实现了多属性和方向控制的排序功能,这对于处理大量具有复杂属性关系的数据很有帮助,提高了代码的可维护性和扩展性。
2020-12-10 上传
2012-03-23 上传
2013-11-07 上传
点击了解资源详情
2023-04-05 上传
2023-04-01 上传
2023-05-19 上传
guoyanping1993
- 粉丝: 0
- 资源: 1
最新资源
- 缓冲区溢出深入剖析(快速了解
- BM String Match
- cmd常用命令大全大家很关心不啊
- surfer中文版基础教程
- More Effecitve C++
- Android教程 很好的入门教程
- JSP数据库编程指南,高清,非影印版
- seam+in+action.pdf 中文参考文档
- java学习资料()
- Prentice.Hall.JBoss.Seam.Simplicity.and.Power.Beyond.Java.EE.Apr.2007
- JBoss4.0.pdf 参考文档
- 5分钟熟悉Maven之中文版官方文档翻译
- Git Phrase Book
- struts电子书(学习struts必备)
- 生命线—质量管理手册
- 高质量C++C 编程指南