• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

java中List对象通用排序算法

JAVA相关 水墨上仙 1831次浏览

java中List对象通用排序算法
来源:http://blog.csdn.net/c622724/article/details/8486909

/**
 * 学生实体类
 * @author chenchuang
 *
 */
public class Student {
	public Student(int id, String name, int age) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
	}
	private int id;
	private String name;
	private int age;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}

工具类:

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
 * List对象排序的通用方法
 * 
 * @author chenchuang
 * 
 * @param <E>
 */
public class ListSort<E> {
	/**
	 * 
	 * @param list 要排序的集合
	 * @param method 要排序的实体的属性所对应的get方法
	 * @param sort desc 为正序  
	 */
	public void Sort(List<E> list, final String method, final String sort) {
		// 用内部类实现排序
		Collections.sort(list, new Comparator<E>() {
			public int compare(E a, E b) {
				int ret = 0;
				try {
					// 获取m1的方法名
					Method m1 = a.getClass().getMethod(method, null);
					// 获取m2的方法名
					Method m2 = b.getClass().getMethod(method, null);
					
					if (sort != null && "desc".equals(sort)) {
						ret = m2.invoke(((E)b), null).toString().compareTo(m1.invoke(((E)a),null).toString());
					} else {
						// 正序排序
						ret = m1.invoke(((E)a), null).toString().compareTo(m2.invoke(((E)b), null).toString());
					}
				} catch (NoSuchMethodException ne) {
					System.out.println(ne);
				} catch (IllegalArgumentException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IllegalAccessException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (InvocationTargetException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				return ret;
			}
		});
	}
}

测试类:

import java.util.ArrayList;
public class ListTest {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		ArrayList<Student> list= new ArrayList<Student>();
		list.add(new Student(1,"张三",5));
		list.add(new Student(2,"李四",4));
		list.add(new Student(3,"王五",3));
		list.add(new Student(4,"小明",2));
		list.add(new Student(5,"小黑",1));
		ListSort<Student> listSort= new ListSort<Student>();
		listSort.Sort(list, "getAge", "desc");
		for(Student s:list){
			System.out.println(s.getId()+s.getName()+s.getAge());
		}
	}
}

测试结果

1张三5
2李四4
3王五3
4小明2
5小黑1


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明java中List对象通用排序算法
喜欢 (0)
加载中……