转载:http://www.cnblogs.com/Bob-FD/archive/2012/09/21/2697275.html
//SortList.java package test; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.lang.reflect.Method; import java.lang.reflect.InvocationTargetException; /** * @author jardot * @version 1.0 * 通用排序 */ public class SortList<E>{ public void Sort(List<E> list, final String method, final String sort){ Collections.sort(list, new Comparator() { public int compare(Object a, Object b) { int ret = 0; try{ Method m1 = ((E)a).getClass().getMethod(method, null); Method m2 = ((E)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(IllegalAccessException ie){ System.out.println(ie); }catch(InvocationTargetException it){ System.out.println(it); } return ret; } }); } }
Collections.sort(users, new Comparator<ActiveUser>() { @Override public int compare(ActiveUser o1, ActiveUser o2) { return CompareToBuilder.reflectionCompare(o1, o2, new String[] {"userId","name"}); } });
调用方法:
//Test.java package test; import java.util.ArrayList; import java.util.List; import java.text.SimpleDateFormat; public class Test { public static void main(String[] args)throws Exception{ List<UserInfo> list = new ArrayList<UserInfo>(); SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd"); list.add(new UserInfo(3,"b",formater.parse("1980-12-01"),11)); list.add(new UserInfo(1,"c",formater.parse("1980-10-01"),30)); list.add(new UserInfo(2,"a",formater.parse("1973-10-01"),11)); System.out.println("-------原来序列-------------------"); for(UserInfo user : list){ System.out.println(user.toString()); } //调用排序通用类 SortList<UserInfo> sortList = new SortList<UserInfo>(); //按userId排序 sortList.Sort(list, "getUserId", "desc"); System.out.println("--------按userId倒序------------------"); for(UserInfo user : list){ System.out.println(user.toString()); } //按username排序 sortList.Sort(list, "getUsername", null); System.out.println("---------按username排序-----------------"); for(UserInfo user : list){ System.out.println(user.toString()); } //按birthDate排序 sortList.Sort(list, "getBirthDatestr", null); System.out.println("---------按birthDate排序-----------------"); for(UserInfo user : list){ System.out.println(user.toString()); } } }
相关推荐
在Java编程中,经常需要对`List`集合中的对象按照特定属性进行排序。传统的方法是在每个实体类中重写`Comparable`接口或提供比较器(`Comparator`),这不仅增加了代码量,而且降低了代码的可维护性和复用性。为了...
总结来说,Java中对List进行排序主要有两种方式:一是实体类实现Comparable接口,适用于对象自身具备比较逻辑的情况;二是使用Comparator接口,允许在外部定义比较规则,更具灵活性。根据具体的需求,开发者可以选择...
这种方法的优点在于它的通用性,可以用于任何包含指定字段的POJO类对象的List排序。然而,这种方法也有一些潜在的安全风险和性能问题。首先,反射操作通常比直接访问字段慢,因此在性能要求较高的场景下可能不是最佳...
首先,`Collections.sort(List<T> list)` 是一个通用的方法,它接受一个List类型的参数,并对其进行排序。排序的标准是基于集合中元素的自然顺序,即元素所属类必须实现了Comparable接口。例如,如果你有一个包含...
- `Collections`:集合操作,如排序`sort(List<T> list)`,反转`reverse(List<T> list)`等。 - `Objects`:提供`equals()`和`hashCode()`的实用方法,以及`requireNonNull()`进行非空检查。 4. **Joda-Time**: ...
// 输出 [null, null] ``` 7. 消息订阅/发布(Pub/Sub): Redis还提供了消息发布/订阅功能,允许不同客户端间通信: ```java // 发布者 jedis.publish("channel", "message"); // 订阅者 JedisPubSub ...
- **`Collection`**:这是Java集合框架的根接口,它定义了一组对象的通用操作,如添加、删除和遍历等。`Collection`有两个主要的子接口——`List`和`Set`。 - **`List`**:这是一个有序集合,允许重复元素,并且...
- HashMap 不保证元素顺序,允许 null 键和值,而某些 Map 实现(如 TreeMap)会根据键排序,或者可以自定义比较器。 - HashMap 是非线程安全的,多线程环境下需要使用 Collections.synchronizedMap() 或 ...
总结,Hibernate通用查询为Java开发者提供了极大的便利,通过封装后的CommonDaoImpl类,我们可以轻松地处理各种查询需求,包括分页和排序。这种模式提高了代码的复用性,降低了开发难度,使得我们可以更加专注于业务...
12. 用JAVA实现一种排序,JAVA类实现序列化的方法(二种)? 通过实现Serializable接口,类可以进行序列化。另一个方法是通过实现Externalizable接口,提供writeExternal和readExternal方法来自定义序列化过程。 13. ...
"java中级面试题(自己汇总)" ...* IdentityHashMap不是Map的通用实现,它有意违反了Map的常规协定。 * IdentityHashMap允许key和value都为null。 * 同HashMap,IdentityHashMap也是无序的,并且该类不是
13. **用JAVA实现一种排序,JAVA类实现序列化的方法(二种)?** - 排序方法参见上文快速排序示例。 - 序列化实现方法:实现`Serializable`接口或实现`Externalizable`接口。 14. **如在COLLECTION框架中,实现比较...
5. 对于集合操作,Java提供了一系列通用方法,如add()、addAll()、contains()、remove()、clear()、equals()、isEmpty()、iterator()、size()、toArray()等,方便对集合进行基本操作。 6. 关于ArrayList和...
在Java中,Util类通常包含了各种通用功能,如集合操作、日期时间处理、字符串处理等。以下是一些Java中常用的Util类及其重要知识点的详细说明: 1. **ArrayList和LinkedList**: 这两个都是`java.util`包下的List...
- **通用性**:`Iterator`可以用来遍历`Set`和`List`集合,而`ListIterator`仅能用来遍历`List`集合。 - **方向性**:`Iterator`只能从前向后遍历集合,而`ListIterator`支持双向遍历。 - **功能扩展**:`...
泛型是Java 5.0引入的新特性,它允许在编译时检查类型安全,并伴有类型参数的无界和有界通配符,可以在运行时创建通用类型。使用泛型可以避免强制类型转换,并提高代码的重用性。 - **语法**:使用尖括号`<T>`定义...
SortAttribute.java:排序注解,标示成员变量为排序字段 TableAttribute.java:数据表注解,标示实体类对应的表名称、说明信息 provider:Sql 语句生成相关 BaseCreateProvider.java:数据表创建语句的生成器,...
根据提供的文件信息,我们可以从中提炼出与Java相关的多个重要知识点,包括面试常见问题、数据类型、集合类使用、异常处理等内容。接下来将对这些知识点进行详细的解析。 ### 1. Java 面试常见问题概览 #### 知识...
4. **算法**:Java集合框架还提供了一些通用的算法,如排序和搜索,这些算法可以在任何实现集合或映射的类上使用。例如,`Collections.sort()`方法可以对`List`进行排序,而`Collections.binarySearch()`则可以在已...
#### 五、冒泡排序算法的通用实现 **知识点概述:** 上述冒泡排序示例仅适用于特定的整数数组,这里给出一种更通用的实现方式。 **具体实现:** ```java public class BubbleSort { public static void main...