Java借助反射实现自定义对象List的排序
程序员文章站
2022-06-08 18:06:54
...
众所周知,java里List集合类提供了sort()的方法,方便懒人对list对象进行排序,但是,其要直接使用sort方法,前提是集合中存放的是可直接排序的基本类型,如List<int>, List<double>等,如果我们定义了一个自定义类型 Class User,并创建一个自定义类型的集合如List<User>,那么无参的sort()方法就不可用了,因为不知道如何排序了。这时就需要Comparator。
Comparator接口里的compare(T o1, T o2)方法中可以定义这两个对象怎样比较,怎样决定谁排在谁前面。因为项目需要写了个List工具类,可以通过指定的属性名,对List<T>类型的对象进行排序,具体代码如下:
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import com.ucs.dto.user.UrUser;
public class ListUtils {
/**
* 根据对象属性名,对对象List进行排序
* @description
* @author
* @time 2016-3-23
* @param t 对象List
* @param fieldName 要排序的属性名
*/
public static <T> void sortList(List<T> t,final String fieldName) {
Collections.sort(t,new Comparator<T>(){
@Override
public int compare(T o1, T o2) {
String temp1 = getProperty(o1, fieldName).toString();
String temp2 = getProperty(o2, fieldName).toString();
return temp1.compareTo(temp2) ;
}
});
}
/**
* 通过属性名获取属性值
* @description
* @author
* @time 2016-3-23
* @param bean 实体类
* @param fieldName 要获取的属性名
* @return
*/
public static Object getProperty(Object bean, String fieldName) {
Field[] fields = bean.getClass().getDeclaredFields();
Object obj = null;
for (int i = 0; i < fields.length; i++) {
Field field = fields[i];
if (fieldName.equals(field.getName())) {
Field.setAccessible(fields, true);
try {
obj = field.get(bean);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
return obj;
}
public static void main(String[] args) {
UrUser u1 = new UrUser();
u1.setLoginfailnum(1);
UrUser u2 = new UrUser();
u2.setLoginfailnum(2);
UrUser u4 = new UrUser();
u4.setLoginfailnum(7);
UrUser u5 = new UrUser();
u5.setLoginfailnum(3);
UrUser u6 = new UrUser();
u6.setLoginfailnum(0);
UrUser u7 = new UrUser();
u7.setLoginfailnum(8);
List<UrUser> list = new ArrayList<UrUser>();
list.add(u1);
list.add(u2);
list.add(u4);
list.add(u5);
list.add(u6);
list.add(u7);
sortList(list,"loginfailnum");
for(UrUser u:list) {
System.out.println(u.getLoginfailnum());
}
}
}
转载于:https://my.oschina.net/u/730579/blog/645954
上一篇: JSTL标签库,自定义标签
下一篇: 排气食物有哪些?
推荐阅读
-
C#使用IComparer自定义List类实现排序的方法
-
C#使用IComparer自定义List类实现排序的方法
-
Java通过注解和反射 实现模拟 Hibernate Validator验证框架对实体对象的字段验证功能
-
如何基于Java实现对象List排序
-
沁园下的一缕残云 留——痕 通过java反射实现简单的关于MongoDB的对象关系映射(ORM).
-
沁园下的一缕残云 留——痕 通过java反射实现简单的关于MongoDB的对象关系映射(ORM).
-
Java中List排序的三种实现方法实例
-
Java8使用stream实现list中对象属性的合并(去重并求和)
-
java8实现List中对象属性的去重方法
-
Java借助反射实现自定义对象List的排序