import java.math.BigDecimal;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import org.apache.commons.beanutils.PropertyUtils;
/**
* 排序类 目前只支持当前页面排序
* 使用说明:SortUtil su = SortUtil.newInstance();
* su.setParam("你想排序的字段")
* su.toSort()方法 见方法说明
* @author litao
*/
@SuppressWarnings("unchecked")
public class SortUtil implements Comparator <Object>{
private static String t;
private static SortUtil su = null;
public SortUtil(){}
/**
* 要排序的字段名必需的
*/
public void setParam(String param) {
t=param;
}
public synchronized static SortUtil newInstance(){
if(su==null){
su = new SortUtil();
}
return su;
}
public int compare(Object o1, Object o2) {
String value1 = String.valueOf(getFieldValue(o1,t));
String value2 = String.valueOf(getFieldValue(o2,t));
try {
BigDecimal b1=BigDecimal.valueOf(Double.valueOf(value1));
BigDecimal b2=BigDecimal.valueOf(Double.valueOf(value2));
return b1.subtract(b2).intValue();
} catch (Exception e) {
return value1.compareTo(value2);
}
}
/**
* 升序(从小到大)
* @param list
* @return
*/
private List upSort(List list){
Collections.sort(list, SortUtil.newInstance());
return list;
}
/**
* 降序(升序之后反转)
* @param list
* @return
*/
private List downSort(List list){
this.upSort(list);
Collections.reverse(list);
return list;
}
/**
* 通过属性名获得对象的值
* @param entity
* @param propertyName
* @return
*/
private Object getFieldValue(Object entity , String propertyName ){
Object obj=null;
try {
obj=PropertyUtils.getProperty(entity,propertyName);
} catch (Exception e) {
e.printStackTrace();
}
return obj;
}
/**
* @param list
* @param orderByType 降序还是升序
* @return
*/
public List toSort(List list,String orderByType){
if("true".equals(orderByType)){
return upSort(list);
}else{
return downSort(list);
}
}
}
分享到:
相关推荐
Java将2个List集合合并到一个List里面并排序工具类 1、Java编程资源,定义了一个名为`ListMerger`的工具类,主要包含一个名为`mergeAndSortLists`的静态方法。此方法用于将两个已经根据时间顺序排列的List合并成一...
"小小图书馆"是一个基于C++编写的图书管理系统,旨在帮助初学者理解面向对象编程和文件操作等核心概念。这个系统提供了图书管理和读者管理的功能,能够有效地组织和存储数据,并将其持久化保存到文件中,方便后续...
1. SortListCtrl.cpp:这个文件可能包含了一个自定义的列表控件实现,用于显示和排序数据。在资源管理器中,排序功能是非常重要的,用户可以通过它来按名称、大小、日期等属性对资源进行排列。 2. PowerDlg.cpp、...
本话题聚焦于如何读取Plist文件,对其中的数据进行排序,然后将排序后的数据保存为一个新的词典,并存储到应用的Document目录下。以下是一系列详细步骤和相关知识点: 1. **Plist文件的读取**: 首先,你需要使用`...
例如,可以创建一个`Student`类,包含学生的ID、姓名、各科成绩等属性。 2. **输入/输出处理**:系统需要能够从用户那里获取数据,如通过命令行界面或简单的图形用户界面(GUI)。C++提供了标准输入输出流...
本文将详细介绍我自己制作的一个小型磁盘管理器,它能帮助你快速定位那些占用大量存储空间的文件夹,并提供直观的图表分析,让磁盘清理变得轻松高效。 首先,这款磁盘管理器的核心功能是显示文件夹大小。它能够逐级...
"MoveTest"可能是一个测试文件或者目录,用于测试商品移动、分类或排序的功能。在电商系统中,商品的动态管理和布局调整是常见操作,例如将商品从一个分类移到另一个,或者在页面上按特定顺序显示。这个测试文件可能...
拓扑排序是图论中的一个重要概念,主要用于有向无环图(DAG,Directed Acyclic Graph)。在计算机科学中,特别是在数据结构和算法领域,拓扑排序常常用于解决任务调度、依赖关系分析等问题。Java语言提供了强大的...
在Java中实现这些排序算法时,可以创建一个通用的排序测试类,如SortTest,包含数组初始化、打印和交换元素等辅助方法。例如,冒泡排序方法会根据排序类型(升序或降序)进行相应的比较和交换操作。 总之,理解各种...
在C++中,我们可以定义一个二叉树节点类,包含节点值、左孩子和右孩子指针。然后,创建一个函数,接受树的根节点和目标节点,通过递归或迭代的方式查找目标节点的双亲。在此过程中,可以维护一个路径列表,记录从根...
在Java代码中,我们定义了一个`InsertSorter`类继承自抽象类`Sorter`,并在`sort`方法中实现了插入排序的具体逻辑。插入排序的时间复杂度在最坏情况下为O(n^2),但在处理部分有序的数据时,效率可以接近线性时间O(n)...
- **直接插入排序**:适用于小规模数据集,其基本思想是将一个记录插入到已排序好的有序表中,从而得到一个新的、记录增1的有序表。 - **折半插入排序**:在直接插入排序的基础上,通过二分查找来减少比较次数,...
在“一年级数学下册 小小图书馆五课件 北师大版”中,主要涉及了以下几个关键知识点: 1. **两位数加一位数的进位加法**:在这个课件中,孩子们学习如何计算像28 + 4、28 + 9这样的题目。这些加法涉及到进位的概念...
"C#开发的小小的案例"就是一个这样的资源,旨在为初学者和有经验的开发者提供实践和学习的平台。这个压缩包可能包含了多个示例项目,每个都展示了C#语言的不同应用场景和特性。 首先,我们要理解C#的基础知识。C#是...
7. **Swing组件的定制**:Swing允许自定义组件,比如你可以创建一个自定义的JTable来展示联系人列表,包括姓名和电话两列,并实现表格的排序和过滤功能。 8. **国际化支持**:如果你的应用需要支持多语言,Swing...
本文将深入探讨如何利用ASP技术和ACCESS数据库创建一个简单的博客系统。 一、ASP基础 ASP是一种服务器端的脚本语言,它允许开发者在HTML代码中嵌入VBScript或JScript代码,通过服务器端处理这些代码,生成动态网页...
Java 排序算法是 Java 编程语言中的一种常用算法,用于对数组或列表进行排序。排序算法的选择取决于数据的规模、类型和已有的顺序。 分类 Java 排序算法可以分为五类:插入排序、交换排序、选择排序、归并排序和...
本题目的核心是实现一个功能,将两个已有的数组合并为一个,然后对合并后的数组进行排序。这个问题通常出现在面试中,以评估应聘者的算法理解、逻辑思维以及对Java编程语言的掌握程度。下面我们将详细探讨这个问题...
如果我们想根据 Map 的 Key 排序,只需要将上面的工具类进行小小的修改: ```java public , V > Map, V> sortByKey(Map, V> map) { Map, V> result = new LinkedHashMap(); map.entrySet().stream() .sorted(Map...