List<Entity>排序:根据javabean中的一个字段对beanList进行排序
来源:互联网 发布:白银杀人案 知乎 编辑:程序博客网 时间:2024/04/30 09:18
问题:项目中可能大家经常遇到List<Entity> 这样的数据结构吧,因为我们经常要查数据库,所得的数据大多都是类似这样的数据结构。
既然是从数据库取数据,排序的问题就应该在sql文中解决了的,可是经常会遇到合并组装过的数据,或者其他来源的数据等等,这时候就需要我们自己再程序中排序了。
知识面:
Collections中sort方法,两种方法:
1,容器内要排序的类必须继承Comparable接口,而Comparable接口就必须实现
int compareTo(T o) 方法。
2,使用静态内部类实现Comparator接口,实现compare(T o1, T o2) 方法。
网上继承Comparable接口的代码如下:
public class Person implements Comparable<Person> { private int age ; private String name ; public Person( int age, String name) { this . age = age; this . name = name; } //实现compareTo方法,方法实现的是比较的规则 public int compareTo(Person person) { int cop = age - person.getAge(); if (cop != 0) return cop; else return name .compareTo(person. name ); } public int getAge() { return age ; } public String getName() { return name ; } public int hashCode() { int result = 17; result = 37 * result + age ; result = 37 * result + name .hashCode(); return result; } public boolean equals(Object o) { if (!(o instanceof Person)) return false ; Person person = (Person) o; return ( age == person. age ) && ( name .equals(person. name )); } public String toString() { return ( age + "{" + name + "}" ); } }
2,网上关于继承Comparator的代码:
import java.util.Comparator;// 继承Comparator接口后,要实现compare(a,b), 就可以使用Collections.sort()方法,Arrays.sort()方法。public class StudentComparator implements Comparator<Object> {public int compare(Object o1, Object o2) {Student s1 = (Student) o1;Student s2 = (Student) o2;int result = (s1.id > s2.id) ? 1 : ((s1.id == s2.id) ? 0 : -1);if (0 == result) {result = s1.name.compareTo(s2.name);}return result;}}public class Student {int id;String name;Student(int id, String name) {this.id = id;this.name = name;}public String toString() {return "id=" + this.id + ",name=" + this.name;}}
还有一个知识点:java的反射机制
Reflection 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性
一下是我写的一可以进行简单排序的代码:
只是一个雏形,还有很多需要添加的代码,以及更具需求不同可以加上更多的功能。
import java.util.Collections;import java.util.Comparator;import java.util.List;public class EntitySort<T> implements Comparator<T> {public static boolean ASC = true;// 升序public static boolean DESC = false;// 降序private boolean sortFlg;// 排序升降序flgprivate String sortKey;// 比较的字段private List<T> list;//比较的listpublic EntitySort(List<T> list, String sortKey, Boolean sortFlg) {this.list = list;this.sortKey = sortKey;this.sortFlg = sortFlg;}public EntitySort(List<T> list, String sortKey) {this.list = list;this.sortKey = sortKey;}public List<T> sort() {Collections.sort(list, this);// 调用Collections.sort方法,第二个参数this,表示使用本class下的compare方法(策略模式?)// sorted listreturn this.list;}// 排序规则实现public int compare(T sortOne, T sortTow) {StringBuffer methodName = new StringBuffer();methodName.append("get");methodName.append(sortKey.substring(0, 1).toUpperCase());methodName.append(sortKey.substring(1));String keyOne = null;String keyTow = null;try {keyOne = (String) sortOne.getClass().getMethod(methodName.toString(), null).invoke(sortOne, null);// 利用反射机制动态取得T下的字段值。if (keyOne == null) {keyOne = "";}keyTow = (String) sortOne.getClass().getMethod(methodName.toString(), null).invoke(sortTow, null);if (keyTow == null) {keyOne = "";}} catch (Exception e) {}if (sortFlg) {// 升降序判断return keyOne.compareTo(keyTow);} else {return -(keyOne.compareTo(keyTow));}}}
- List<Entity>排序:根据javabean中的一个字段对beanList进行排序
- 根据value字段对map进行排序
- 根据list对象中的某一字段排序
- 根据list对象中的某一字段排序
- 根据列表中的指定字段进行排序
- C语言-对一个结构体中的字段进行排序
- java中list里面存放map,根据map中的某一个字段进行排序
- java中list里面存放map,根据map中的某一个字段进行排序
- 2015061502 - List中根据某个字段进行排序(方法1)
- 对List中的Map遍历输出,并且根据map中的某个键值进行排序
- java list 根据字段排序
- 根据实体类中的多个字段的值,对实体类进行排序
- list集如何以某个字段对list进行排序
- 根据对象的某个字段对List<Object>排序
- 根据给定的字段对list逆序排序
- Java中对一个list进行排序
- php数组根据指定字段对数组进行排序函数
- 对list中的对象进行排序
- Java虚拟机
- 怎么总是完不成?
- 基于WCF的REST服务
- 最基础的makefile的写法
- 线程退出处理函数 pthread_cleanup_push pthread_cleanup_pop
- List<Entity>排序:根据javabean中的一个字段对beanList进行排序
- java调用cmd窗口
- PB12.5评测
- 清理软件缓存
- Exjs 入门篇
- c++程序里如何调用MATLAB中的函数
- android menu.add()的使用说明
- java 中使用接口的好处
- 内核获得内存的几种途径