`
01jiangwei01
  • 浏览: 540847 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java list 排序,null 情况,通用

    博客分类:
  • java
 
阅读更多

转载: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());
        }
    }

}

 

分享到:
评论

相关推荐

    List 对象属性排序

    在Java编程中,经常需要对`List`集合中的对象按照特定属性进行排序。传统的方法是在每个实体类中重写`Comparable`接口或提供比较器(`Comparator`),这不仅增加了代码量,而且降低了代码的可维护性和复用性。为了...

    Java对List进行排序的两种实现方法

    总结来说,Java中对List进行排序主要有两种方式:一是实体类实现Comparable接口,适用于对象自身具备比较逻辑的情况;二是使用Comparator接口,允许在外部定义比较规则,更具灵活性。根据具体的需求,开发者可以选择...

    Java对List对象进行排序_.docx

    这种方法的优点在于它的通用性,可以用于任何包含指定字段的POJO类对象的List排序。然而,这种方法也有一些潜在的安全风险和性能问题。首先,反射操作通常比直接访问字段慢,因此在性能要求较高的场景下可能不是最佳...

    JAVA对list集合进行排序Collections.sort()

    首先,`Collections.sort(List&lt;T&gt; list)` 是一个通用的方法,它接受一个List类型的参数,并对其进行排序。排序的标准是基于集合中元素的自然顺序,即元素所属类必须实现了Comparable接口。例如,如果你有一个包含...

    java开发中常用的通用工具类.rar

    - `Collections`:集合操作,如排序`sort(List&lt;T&gt; list)`,反转`reverse(List&lt;T&gt; list)`等。 - `Objects`:提供`equals()`和`hashCode()`的实用方法,以及`requireNonNull()`进行非空检查。 4. **Joda-Time**: ...

    java redis 各类型操作实例

    // 输出 [null, null] ``` 7. 消息订阅/发布(Pub/Sub): Redis还提供了消息发布/订阅功能,允许不同客户端间通信: ```java // 发布者 jedis.publish("channel", "message"); // 订阅者 JedisPubSub ...

    张孝祥Java面试技巧

    - **`Collection`**:这是Java集合框架的根接口,它定义了一组对象的通用操作,如添加、删除和遍历等。`Collection`有两个主要的子接口——`List`和`Set`。 - **`List`**:这是一个有序集合,允许重复元素,并且...

    java面试问题小集

    - HashMap 不保证元素顺序,允许 null 键和值,而某些 Map 实现(如 TreeMap)会根据键排序,或者可以自定义比较器。 - HashMap 是非线程安全的,多线程环境下需要使用 Collections.synchronizedMap() 或 ...

    hibernate通用查询

    总结,Hibernate通用查询为Java开发者提供了极大的便利,通过封装后的CommonDaoImpl类,我们可以轻松地处理各种查询需求,包括分页和排序。这种模式提高了代码的复用性,降低了开发难度,使得我们可以更加专注于业务...

    2014年Java最全面试题以及答案.

    12. 用JAVA实现一种排序,JAVA类实现序列化的方法(二种)? 通过实现Serializable接口,类可以进行序列化。另一个方法是通过实现Externalizable接口,提供writeExternal和readExternal方法来自定义序列化过程。 13. ...

    java中级面试题(自己汇总)

    "java中级面试题(自己汇总)" ...* IdentityHashMap不是Map的通用实现,它有意违反了Map的常规协定。 * IdentityHashMap允许key和value都为null。 * 同HashMap,IdentityHashMap也是无序的,并且该类不是

    Java企业级开发综合技能知识总结

    13. **用JAVA实现一种排序,JAVA类实现序列化的方法(二种)?** - 排序方法参见上文快速排序示例。 - 序列化实现方法:实现`Serializable`接口或实现`Externalizable`接口。 14. **如在COLLECTION框架中,实现比较...

    java集合详解与总结.pdf

    5. 对于集合操作,Java提供了一系列通用方法,如add()、addAll()、contains()、remove()、clear()、equals()、isEmpty()、iterator()、size()、toArray()等,方便对集合进行基本操作。 6. 关于ArrayList和...

    Java常用Util类

    在Java中,Util类通常包含了各种通用功能,如集合操作、日期时间处理、字符串处理等。以下是一些Java中常用的Util类及其重要知识点的详细说明: 1. **ArrayList和LinkedList**: 这两个都是`java.util`包下的List...

    java基础知识点

    - **通用性**:`Iterator`可以用来遍历`Set`和`List`集合,而`ListIterator`仅能用来遍历`List`集合。 - **方向性**:`Iterator`只能从前向后遍历集合,而`ListIterator`支持双向遍历。 - **功能扩展**:`...

    Java软件开发实战 Java基础与案例开发详解 11-1 Java集合框架和泛型机制 共6页.pdf

    泛型是Java 5.0引入的新特性,它允许在编译时检查类型安全,并伴有类型参数的无界和有界通配符,可以在运行时创建通用类型。使用泛型可以避免强制类型转换,并提高代码的重用性。 - **语法**:使用尖括号`&lt;T&gt;`定义...

    kellerMapper.jar

    SortAttribute.java:排序注解,标示成员变量为排序字段 TableAttribute.java:数据表注解,标示实体类对应的表名称、说明信息 provider:Sql 语句生成相关 BaseCreateProvider.java:数据表创建语句的生成器,...

    JAVA问题100道

    根据提供的文件信息,我们可以从中提炼出与Java相关的多个重要知识点,包括面试常见问题、数据类型、集合类使用、异常处理等内容。接下来将对这些知识点进行详细的解析。 ### 1. Java 面试常见问题概览 #### 知识...

    Java数据结构及集合类.doc

    4. **算法**:Java集合框架还提供了一些通用的算法,如排序和搜索,这些算法可以在任何实现集合或映射的类上使用。例如,`Collections.sort()`方法可以对`List`进行排序,而`Collections.binarySearch()`则可以在已...

    Java编程题汇总

    #### 五、冒泡排序算法的通用实现 **知识点概述:** 上述冒泡排序示例仅适用于特定的整数数组,这里给出一种更通用的实现方式。 **具体实现:** ```java public class BubbleSort { public static void main...

Global site tag (gtag.js) - Google Analytics