欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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