利用反射 和 comparator 实现List 的简单排序
来源:互联网 发布:职场女性英文名知乎 编辑:程序博客网 时间:2024/04/28 15:42
对博友的文章http://blog.csdn.net/Ice0River/article/details/1643407进行了修改
一 、 测试bean
public class TestBean {
private String strId;
private String strName;
public String getStrId() {
return strId;
}
public void setStrId(String strId) {
this.strId = strId;
}
public String getStrName() {
return strName;
}
public void setStrName(String strName) {
this.strName = strName;
}
}
二 、实现 Comparator 接口
import java.lang.reflect.Method;
import java.util.Comparator;
public class MyCompatrator implements Comparator<TestBean> {
private String strGetterNameOfSortField;
public void setStrGetterNameOfSortField(String strGetterNameOfSortField) {
this.strGetterNameOfSortField = strGetterNameOfSortField;
}
public int compare( TestBean objLeft, TestBean objRight){
String strMethodName = strGetterNameOfSortField;
String strValueLeft = null;
String strValueRight = null;
int cmpResult = 0;
try {
Class clsBean = TestBean.class;
Method objMethod = clsBean.getDeclaredMethod(strMethodName);
strValueLeft = objMethod.invoke(objLeft).toString();
strValueRight = objMethod.invoke(objRight).toString();
}
catch (SecurityException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
cmpResult = (objLeft.getStrId() > objRight.getStrId() ? 1 : -1);
return cmpResult;
}
catch (NoSuchMethodException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
cmpResult = (objLeft.getStrId() > objRight.getStrId() ? 1 : -1);
return cmpResult;
}
catch (IllegalArgumentException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
cmpResult = (objLeft.getStrId() > objRight.getStrId() ? 1 : -1);
return cmpResult;
}
catch (IllegalAccessException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
cmpResult = (objLeft.getStrId() > objRight.getStrId() ? 1 : -1);
return cmpResult;
}
catch (InvocationTargetException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
cmpResult = (objLeft.getStrId() > objRight.getStrId() ? 1 : -1);
return cmpResult;
}
if (null != strValueLeft && null != strValueRight)
{
cmpResult = strValueLeft .compareTo(strValueRight);
} else if (null == strValueLeft && null != strValueRight )
{
cmpResult = -1;
} else if (null != strValueLeft && null == strValueRight)
{
cmpResult = 1;
} else if (null == strValueLeft && null == strValueRight)
{
cmpResult = 0;
}
// 如果两个节点排序属性值相等,按照节点索引标识排序
if (0 == cmpResult)
{
cmpResult = (objLeft.getStrId() > objRight.getStrId() ? 1 : -1);
}
return cmpResult;
}
}
三 、 测试
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class TestSort {
public static void main(String args[]) {
List lstTestData = new ArrayList();
MyCompatrator myComparator = new MyCompatrator();
for (int intLoop = 0; intLoop < 10; intLoop++) {
TestBean testBean = new TestBean();
testBean.setStrId(String.valueOf(intLoop));
testBean.setStrName(String.valueOf(10 - intLoop));
lstTestData.add(testBean);
}
for (int intLoop = 0; intLoop < 10; intLoop++) {
TestBean testBean = (TestBean)lstTestData.get(intLoop);
System.out.println(testBean.getStrId() + " " + testBean.getStrName());
}
myComparator.setStrGetterNameOfSortField("getStrName");
myComparator.setBlnSortRule(false);
myComparator.setStrBeanName("TestBean");
Collections.sort(lstTestData, myComparator);
for (int intLoop = 0; intLoop < 10; intLoop++) {
TestBean testBean = (TestBean)lstTestData.get(intLoop);
System.out.println(testBean.getStrId() + " " + testBean.getStrName());
}
}
}
总结
实现简单排序,只对String 类型进行了排序,且未考虑bean 内字段为空的情况
- 利用反射 和 comparator 实现List 的简单排序
- 使用 java 的反射 和 comparator 实现java bean 的简单排序
- Comparator实现List排序
- 利用实现Comparator接口排序
- java List利用Comparator进行排序
- list排序comparator和comparable的用法和区别
- 对利用反射和prototype实现继承的简单封装
- JAVA 利用Comparator实现自定义排序
- 利用JAVA Comparator接口实现数组排序
- JAVA ArrayList利用Comparator实现自定义排序
- Java利用Comparator与Collections.sort对List排序
- Java利用Comparator与Collections.sort对List排序
- java利用Comparator与Collections.sort对List排序
- java实现排序的方法-继承Comparable和Comparator
- TreeSet的排序两种实现方式Comparator和Comparable
- comparator对list排序
- List Comparator排序
- 反射机制和MetaData的简单利用
- 降低显示列表上的复杂性来提高性能
- 青蛙又回到了井里
- FPGA_Embedded_9_21
- FPGA_Embedded_9_24
- html character entities
- 利用反射 和 comparator 实现List 的简单排序
- Java数组学习
- c语言-文件常用的操作
- 指针与引用的区别
- 测试工具(三)——jMock 1.2
- 流操作的基本规律
- HDU 4419 Colourful Rectangle
- 红薯 在FLTK中使用OpenGL进行图形编程
- JSP ACTION传值问题