public class ObjectComparator
extends java.lang.Object
implements java.util.Comparator, java.lang.Comparable
若数据保存在 List 中,旧版本要先把数据转成数组,最新的版本支持直接排序。与ChineseComparator对象结合对对象数组的某一方法返回值进行排序:
List lstData = new ArrayList();
Ojbject[] arrayData;
lstData.add(new MyClass("111"));
lstData.add(new MyClass("222"));
arrayData = lstData.toArray();
新版本直接排序:
Collections.sort(lstData, new ObjectComparator(new MyClass(),
"getMyVal",
String.class,
false));
排序的例子1:
Object[] arrayData = { "111", "333", new Integer(2) };
Arrays.sort(arrayData, new ObjectComparator(arrayData,
"toString",
String.class));
for (int n = 0; n < arrayData.length; n++)
{
log.info("arrayData[" + n + "]=" + arrayData[n]);
}
Arrays.sort(arrayData, new ObjectComparator(arrayData,
"toString",
String.class,
true));
for (int n = 0; n < arrayData.length; n++)
{
log.info("arrayData[" + n + "]=" + arrayData[n]);
}
排序的例子2,任意类型的数据均可排序:
SiteUser objUser = new SiteUser();
SiteUser[] arrayUser;
arrayUser = (SiteUser[])objUser.searchUser("刘", null);
System.out.println("getName() 排序");
Arrays.sort(arrayUser, new ObjectComparator(arrayUser,
"getName",
String.class));
System.out.println("getID() 反向排序");
Arrays.sort(arrayUser, new ObjectComparator(arrayUser,
"getID",
Long.class, true));
通过指定方法返回的对象的某个方法返回值的排序例子: // SiteUser 对象的 getAbilityList() 返回 List 对象。 // 要求以getAbilityList()返回的列表的第一个数据的字符串值为排序依据。 SiteUser objUser = new SiteUser();
SiteUser[] arrayUser;
arrayUser = (SiteUser[])objUser.searchUser("刘", null);
System.out.println("getAbilityList().get(0).toString() 排序");
Arrays.sort(arrayUser, new ObjectComparator(arrayUser,
"getAbilityList().get(0).toString()",
String.class));
// 中文名称排序
Comparator objCmp;
objCmp = new ObjectComparator(new ChineseComparator(), arrayData, "getName", String.class);
Arrays.sort(arrayData, objCmp);
// 直接对List中元素类型为MyClass,函数 getMyVal()返回的带中文字符串值按中文拼音排序。
List lstData;
Collections.sort(lstData, new ObjectComparator(new ChineseComparator(),
new MyClass(),
"getMyVal",
String.class,
false));
com.hynnet.util.ChineseComparator 中文拼音比较器。| 构造器和说明 |
|---|
ObjectComparator(java.util.Comparator<?> comparator,
java.lang.Object data,
java.lang.String methodName)
比较器构造函数。
|
ObjectComparator(java.util.Comparator<?> comparator,
java.lang.Object data,
java.lang.String methodName,
boolean isSortDesc)
比较器构造函数。
|
ObjectComparator(java.util.Comparator<?> comparator,
java.lang.Object data,
java.lang.String methodName,
java.lang.Class<?> valueClass)
比较器构造函数。
|
ObjectComparator(java.util.Comparator<?> comparator,
java.lang.Object data,
java.lang.String methodName,
java.lang.Class<?> valueClass,
boolean isSortDesc)
比较器构造函数。
|
ObjectComparator(java.lang.Object data,
java.lang.String methodName)
比较器构造函数。
|
ObjectComparator(java.lang.Object data,
java.lang.String methodName,
boolean isSortDesc)
比较器构造函数。
|
ObjectComparator(java.lang.Object data,
java.lang.String methodName,
java.lang.Class<?> valueClass)
比较器构造函数。
|
ObjectComparator(java.lang.Object data,
java.lang.String methodName,
java.lang.Class<?> valueClass,
boolean isSortDesc)
比较器构造函数。
|
public ObjectComparator(java.util.Comparator<?> comparator,
java.lang.Object data,
java.lang.String methodName)
NewsVO[] arrayNewsVO;
ChineseComparator objComparator;
objComparator = new ChineseComparator();
System.out.println("Title=" + arrayNewsVO[0].getTilte());
Arrays.sort(arrayNewsVO, new ObjectComparator(objComparator,
arrayNewsVO,
"getTitle",
String.class));
Arrays.sort(arrayNewsVO, new ObjectComparator(arrayNewsVO,
"getSize",
Integer.class));
Arrays.sort(arrayNewsVO, new ObjectComparator(arrayNewsVO, "getID", Long.class));
comparator - 返回值比较的比较器对象(可以为空)。data - 需要比较的数据对象(数组元素的对象)。methodName - 比较时调用的函数名字。多函数时用句点分隔。
合法名字:
"getName"
"getName()"
"getClass.toString"
"getClass().toString()"
"get(0).toString"
"get('TYPE1').toString"
"get('TYPE1').getUser().getName()"
public ObjectComparator(java.util.Comparator<?> comparator,
java.lang.Object data,
java.lang.String methodName,
boolean isSortDesc)
NewsVO[] arrayNewsVO;
ChineseComparator objComparator;
objComparator = new ChineseComparator();
System.out.println("Title=" + arrayNewsVO[0].getTilte());
Arrays.sort(arrayNewsVO, new ObjectComparator(objComparator, arrayNewsVO, "getTitle", String.class));
Arrays.sort(arrayNewsVO, new ObjectComparator(arrayNewsVO, "getSize", Integer.class));
Arrays.sort(arrayNewsVO, new ObjectComparator(arrayNewsVO, "getID", Long.class));
comparator - 返回值比较的比较器对象(可以为空)。data - 需要比较的数据对象(数组元素的对象)。methodName - 比较时调用的函数名字。多函数时用句点分隔。
合法名字:
"getName"
"getName()"
"getClass.toString"
"getClass().toString()"
"get(0).toString"
"get('TYPE1').toString"
"get('TYPE1').getUser().getName()"
isSortDesc - 是否反向排序。public ObjectComparator(java.util.Comparator<?> comparator,
java.lang.Object data,
java.lang.String methodName,
java.lang.Class<?> valueClass)
NewsVO[] arrayNewsVO;
ChineseComparator objComparator;
objComparator = new ChineseComparator();
System.out.println("Title=" + arrayNewsVO[0].getTilte());
Arrays.sort(arrayNewsVO, new ObjectComparator(objComparator,
arrayNewsVO,
"getTitle",
String.class));
Arrays.sort(arrayNewsVO, new ObjectComparator(arrayNewsVO,
"getSize",
Integer.class));
Arrays.sort(arrayNewsVO, new ObjectComparator(arrayNewsVO, "getID", Long.class));
comparator - 返回值比较的比较器对象(可以为空)。data - 需要比较的数据对象(数组元素的对象)。methodName - 比较时调用的函数名字。多函数时用句点分隔。
合法名字:
"getName"
"getName()"
"getClass.toString"
"getClass().toString()"
"get(0).toString"
"get('TYPE1').toString"
"get('TYPE1').getUser().getName()"
valueClass - 比较时调用的函数返回的类型。public ObjectComparator(java.util.Comparator<?> comparator,
java.lang.Object data,
java.lang.String methodName,
java.lang.Class<?> valueClass,
boolean isSortDesc)
NewsVO[] arrayNewsVO;
ChineseComparator objComparator;
objComparator = new ChineseComparator();
System.out.println("Title=" + arrayNewsVO[0].getTilte());
Arrays.sort(arrayNewsVO, new ObjectComparator(objComparator, arrayNewsVO, "getTitle", String.class));
Arrays.sort(arrayNewsVO, new ObjectComparator(arrayNewsVO, "getSize", Integer.class));
Arrays.sort(arrayNewsVO, new ObjectComparator(arrayNewsVO, "getID", Long.class));
comparator - 返回值比较的比较器对象(可以为空)。data - 需要比较的数据对象(数组元素的对象)。methodName - 比较时调用的函数名字。多函数时用句点分隔。
合法名字:
"getName"
"getName()"
"getClass.toString"
"getClass().toString()"
"get(0).toString"
"get('TYPE1').toString"
"get('TYPE1').getUser().getName()"
valueClass - 比较时调用的函数返回的类型。isSortDesc - 是否反向排序。public ObjectComparator(java.lang.Object data,
java.lang.String methodName)
NewsVO[] arrayNewsVO;
System.out.println("Title=" + arrayNewsVO[0].getTilte());
Arrays.sort(arrayNewsVO, new ObjectComparator(arrayNewsVO, "getTitle", String.class));
Arrays.sort(arrayNewsVO, new ObjectComparator(arrayNewsVO, "getSize", Integer.class));
Arrays.sort(arrayNewsVO, new ObjectComparator(arrayNewsVO, "getID", Long.class));
data - 需要比较的数据对象(数组元素的对象)。methodName - 比较时调用的函数名字。多函数时用句点分隔。
合法名字:
"getName"
"getName()"
"getClass.toString"
"getClass().toString()"
"get(0).toString"
"get('TYPE1').toString"
"get('TYPE1').getUser().getName()"
public ObjectComparator(java.lang.Object data,
java.lang.String methodName,
boolean isSortDesc)
NewsVO[] arrayNewsVO;
System.out.println("Title=" + arrayNewsVO[0].getTilte());
Arrays.sort(arrayNewsVO, new ObjectComparator(arrayNewsVO, "getTitle", String.class));
Arrays.sort(arrayNewsVO, new ObjectComparator(arrayNewsVO, "getSize", Integer.class));
Arrays.sort(arrayNewsVO, new ObjectComparator(arrayNewsVO, "getID", Long.class));
data - 需要比较的数据对象(数组元素的对象)。methodName - 比较时调用的函数名字。多函数时用句点分隔。
合法名字:
"getName"
"getName()"
"getClass.toString"
"getClass().toString()"
"get(0).toString"
"get('TYPE1').toString"
"get('TYPE1').getUser().getName()"
clsValue - 比较时调用的函数返回的类型。isSortDesc - 是否反向排序。public ObjectComparator(java.lang.Object data,
java.lang.String methodName,
java.lang.Class<?> valueClass)
NewsVO[] arrayNewsVO;
System.out.println("Title=" + arrayNewsVO[0].getTilte());
Arrays.sort(arrayNewsVO, new ObjectComparator(arrayNewsVO, "getTitle", String.class));
Arrays.sort(arrayNewsVO, new ObjectComparator(arrayNewsVO, "getSize", Integer.class));
Arrays.sort(arrayNewsVO, new ObjectComparator(arrayNewsVO, "getID", Long.class));
data - 需要比较的数据对象(数组元素的对象)。methodName - 比较时调用的函数名字。多函数时用句点分隔。
合法名字:
"getName"
"getName()"
"getClass.toString"
"getClass().toString()"
"get(0).toString"
"get('TYPE1').toString"
"get('TYPE1').getUser().getName()"
valueClass - 比较时调用的函数返回的类型。public ObjectComparator(java.lang.Object data,
java.lang.String methodName,
java.lang.Class<?> valueClass,
boolean isSortDesc)
NewsVO[] arrayNewsVO;
System.out.println("Title=" + arrayNewsVO[0].getTilte());
Arrays.sort(arrayNewsVO, new ObjectComparator(arrayNewsVO, "getTitle", String.class));
Arrays.sort(arrayNewsVO, new ObjectComparator(arrayNewsVO, "getSize", Integer.class));
Arrays.sort(arrayNewsVO, new ObjectComparator(arrayNewsVO, "getID", Long.class));
data - 需要比较的数据对象(数组元素的对象)。methodName - 比较时调用的函数名字。多函数时用句点分隔。
合法名字:
"getName"
"getName()"
"getClass.toString"
"getClass().toString()"
"get(0).toString"
"get('TYPE1').toString"
"get('TYPE1').getUser().getName()"
valueClass - 比较时调用的函数返回的类型。isSortDesc - 是否反向排序。public int compare(java.lang.Object data1,
java.lang.Object data2)
compare 在接口中 java.util.ComparatorComparator.compare(java.lang.Object, java.lang.Object)public int compareTo(java.lang.Object data2)
compareTo 在接口中 java.lang.Comparablepublic static void main(java.lang.String[] args)
Copyright © 2001-2014 hynnet.com