`

对集合进行排序

阅读更多

 

package com.shaphar.erp.mobile.common.util;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * Created by Administrator on 2018/7/17.
 */
public class ListSortUtil<T> {
    /**
     *
     * @param targetList   要排序的集合(使用泛型)
     * @param sortField       要排序的集合中的实体类的某个字段
     * @param sortMode    排序的方式(升序asc/降序desc)
     */
@SuppressWarnings({ "unchecked", "rawtypes" })
    public   void  sort(List<T> targetList, final String sortField, final String sortMode) {
        //使用集合的sort方法  ,并且自定义一个排序的比较器
        /**
         * API文档:
         * public static <T> void sort(List<T> list,Comparator<? super T> c)
         * 根据指定比较器产生的顺序对指定列表进行排序。此列表内的所有元素都必须可使用指定比较器 相互比较
         * (也就是说,对于列表中的任意 e1 和 e2 元素, c.compare(e1, e2) 不得抛出 ClassCastException)。
         * 参数:     list - 要排序的列表。
         *      c - 确定列表顺序的比较器。 null 值指示应该使用元素的 自然顺序。
         */
Collections.sort(targetList, new Comparator() {
            //匿名内部类,重写compare方法
public int compare(Object obj1, Object obj2) {
                int result = 0;
                try {
                    //首字母转大写
String newStr = sortField.substring(0, 1).toUpperCase()+sortField.replaceFirst("\\w","");
                    //获取需要排序字段的“get方法名”
String methodStr = "get"+newStr;
                    /**    API文档::
                     *  getMethod(String name, Class<?>... parameterTypes)
                     *  返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。
                     */
Method method1 = ((T)obj1).getClass().getMethod(methodStr, null);
                    Method method2 = ((T)obj2).getClass().getMethod(methodStr, null);
                    if (sortMode != null && "desc".equals(sortMode)) {
                        /**
                         * Method类代表一个方法,invoke(调用)就是调用Method类代表的方法。
                         * 它可以让你实现动态调用,也可以动态的传入参数。
                         * API文档:(这个英文解释更地道易懂,原谅我是英文渣,哎!)
                         * invoke(Object obj, Object... args)
                         * Invokes the underlying method represented by this Method object,
                         *     on the specified object with the specified parameters.
                         */
                        /** API文档:
                         * String-----public int compareTo(String anotherString)
                         * 按字典顺序比较两个字符串。该比较基于字符串中各个字符的 Unicode 值。
                         * 按字典顺序将此 String 对象表示的字符序列与参数字符串所表示的字符序列进行比较
                         */
result = method2.invoke(((T) obj2), null).toString()
                                .compareTo(method1.invoke(((T) obj1), null).toString()); // 倒序
} else {
                        result = method1.invoke(((T) obj1), null).toString()
                                .compareTo(method2.invoke(((T) obj2), null).toString()); // 正序
}
                } catch (Exception e) {
                    throw new RuntimeException();
                }
                return result;
            }
        });
    }
}
分享到:
评论

相关推荐

    利用集合进行排序,VB6.0源代码编写

    在这个例子中,我们使用了冒泡排序算法对集合进行排序,这只是一个基础示例。实际应用中,可能需要根据实际需求选择更高效的排序算法,如快速排序或归并排序。同时,`CompareItems`函数可以根据具体的数据类型进行...

    C#中键值对集合按值排序

    有时我们可能需要按照值的大小对这些键值对进行排序,以便进行进一步的处理或分析。本文将详细探讨如何在C#中实现按值对键值对集合进行排序,特别是对于可以是任何类型数据的值。 首先,要按值排序一个键值对集合,...

    学生集合排序

    在Java编程中,对学生集合进行排序是一个常见的需求,特别是在处理教育数据或管理学生信息时。本文将详细探讨如何实现这个过程,重点在于重写`hashCode`和`equals`方法,以及利用`Collections`工具类和自定义比较器...

    .Net中的集合排序可以这么玩你知道吗

    .Net中的集合排序可以这么玩你知道吗 .Net中的集合排序可以这么玩你知道吗

    Java集合排序及java集合类详解.pdf

    在文档《Java集合排序及java集合类详解.pdf》中,虽然由于OCR扫描的原因,内容存在一些文字错误和漏识别,但可以推断该文档详细讲解了Java集合类的各个接口以及实现类的特点、用法以及它们之间的区别,并且详细介绍...

    java中集合排序

    本文将深入探讨Java中集合排序的相关知识点,包括基本概念、排序方法以及常用类的实现。 1. **集合接口与实现** Java集合框架主要包括`List`, `Set`, 和 `Map`三大接口。其中,`List`接口要求元素有序,允许重复;...

    SORTSET (v2.0):根据用户定义的顺序对集合进行排序-matlab开发

    SORTSET 根据用户定义的顺序对集合进行排序 对于向量,R = SORTSET(S,ORDER)根据ORDER指定的顺序对集合S进行排序。 如果 S 的元素不在 ORDER 中,它们将按原始顺序放在 R 的末尾。 对于矩阵,SORTSET(S,ORDER) 对...

    java8-像使用SQL一样排序集合.pdf

    Java 8 引入了许多新特性,极大地提高了开发效率,其中一项重要的改进就是对集合排序的支持。本篇文章将深入探讨如何使用 Java 8 如同 SQL 一样对集合进行排序,包括字符串列表、整数列表以及对象字段的排序。 首先...

    Java集合排序及java集合类详解(Collection、List、Map、Set)

    ### Java集合排序及java集合类详解(Collection、List、Map、Set) #### 集合框架概述 ##### 容器简介 在Java编程中,容器(Container)是指用来存储和管理对象的一种数据结构。随着应用程序复杂度的增加,简单地...

    java集合排序及文件读取.rar

    在"java集合排序及文件读取.rar"这个压缩包中,我们很可能会找到关于如何在Java中对集合进行排序以及如何读取文件的示例代码。让我们详细探讨这些关键知识点。 **Java集合排序** Java集合框架包括接口如`List`、`...

    集合操作的实现.rar

    在BST中,可以先对两个集合进行排序,然后依次添加到一个新的BST中,避免添加重复元素。另一种方法是将一个集合的每个元素插入到另一个集合中,利用BST的自平衡特性,可以保证操作的效率。 **补集**: 补集操作是在...

    List集合排序222222

    导入jar 包 调用 String[] arr1 = new String[1]; ... 参数1 排序的集合 参数2 排序的字段(与定义字段一致) 可多个 参数3 排序方式(asc desc) 暂时只支持String 和int的排序 可能有些BUG 敬请谅解

    集合框架,java中常用的集合类和接口

    Java 集合框架概述 ...* 排序元素:使用 sort() 方法对集合中的元素进行排序。 Java 集合框架是 Java 语言中的一种重要组件,提供了丰富的接口和类,简化了集合操作,并提高了编程效率、代码可读性和可维护性。

    java中进行集合排序

    ### Java中进行集合排序 在Java编程中,对集合(如`List`)中的对象进行排序是一项常见的操作。本文将详细介绍如何根据对象的特定属性来实现升序或降序排序。 #### 标题:Java中进行集合排序 该标题表明文章的...

    java 集合练习题

    最后,使用Collections.sort()方法对集合进行排序,并通过遍历ArrayList将结果输出到控制台。 ```java import java.util.*; public class Main { public static void main(String[] args) { Scanner scanner = ...

    java 集合分组与排序

    它直接在原地对列表进行排序,无需额外的流处理。例如: ```java List&lt;Person&gt; people = ...; Collections.sort(people, Comparator.comparing(Person::getName)); ``` - 流API的`sorted()`:适用于任何可...

    Java 集合方面的面试题

    如何使用 Collections 类对集合进行排序? 什么是 Comparable 和 Comparator 接口?它们有什么区别? 如何使用 ConcurrentHashMap 类来实现线程安全的映射? 如何避免在多线程环境下对同一集合的并发修改? 如何使用...

    Java集合排序及java集合类详解

    在Java集合排序方面,我们主要关注List和Map。对于List,可以使用Collections.sort()方法进行排序,这个方法默认使用元素的自然顺序,如果元素是自定义对象,需要实现Comparable接口或者提供Comparator。对于Map,...

    c#经典排序

    这些方法适用于`IEnumerable&lt;T&gt;`类型的集合,可以根据提供的比较器或者元素的自然顺序对集合进行排序。例如,对于一个整数列表,只需一行代码`list.OrderBy(i =&gt; i)`即可完成升序排序。 2. **数组和列表的Sort方法*...

    Java对集合中的对象排序

    对集合中的对象进行排序,例如:List中存放了User对象,则可根据User对象的某一个属性进行顺序or倒序的排序

Global site tag (gtag.js) - Google Analytics