`
blueyanghualong
  • 浏览: 227369 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java实现一个自定义排序

 
阅读更多

 

java中List排序 例子
 
package test;
 
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
public class Test {
 
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO 自動生成されたメソッド・スタブ
        List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
        Map<String,Object> m1 = new HashMap<String,Object>();
        m1.put("NO", 2);
        m1.put("NO1", "2");
        m1.put("NO2", "f");
        list.add(m1);
        Map<String,Object> m2 = new HashMap<String,Object>();
        m2.put("NO", 1);
        m2.put("NO1", "10");
        m2.put("NO2", "z");
        list.add(m2);        
        Map<String,Object> m3 = new HashMap<String,Object>();
        m3.put("NO", 1);
        m3.put("NO1", "10");
        m3.put("NO2", "a");
        list.add(m3);
 
        Test test = new Test();
        test.getSortedList(list,new String[]{"NO","NO1","NO2"});
        System.out.println(list);
        
    }
    
    private void getSortedList(List<Map<String, Object>> list, String[] pros) {
 
        if (pros.length <= 0)
            return;
        for (int i = pros.length - 1; i >= 0; i--) {
            final String pro = pros[i];
            try {
                Collections.sort(list, new Comparator<Map<String, Object>>() {
                    String name = "get";
                    Method method = Map.class.getMethod(name, new Class[] {Object.class});
 
                    public int compare(Map<String, Object> a, Map<String, Object> b) {
                        if (a == null || b == null) {
                            return 0;
                        } else {
                            int flag = 0;
                            try {
 
                                Object as = method.invoke(a, new Object[] {pro});
                                Object bs = method.invoke(b, new Object[] {pro});
                                if (as == null && bs == null)
                                    return 0;
                                else if (as == null)
                                    return -1;
                                else if (bs == null)
                                    return 1;
                                else {
                                    if (as instanceof Integer) {                                        
                                        Integer va = (Integer) as;
                                        Integer vb = (Integer) bs;
                                        flag = va.compareTo(vb);
                                    }else if (as instanceof String) {
                                        String va = (String) as;
                                        String vb = (String) bs;
                                        flag = va.compareTo(vb);
                                    }
                                }
                            } catch (IllegalArgumentException e) {
                                System.out.println("e1");
                            } catch (IllegalAccessException e) {
                                System.out.println("e2");
                            } catch (InvocationTargetException e) {
                                System.out.println("e3");
                            }
                            return flag;
                        }
                    }
                });
            } catch (NoSuchMethodException e) {
                //TODO Auto-generated catch block 
                e.printStackTrace();
            }
        }
    }
}
执行结果:
[{NO=1, NO2=a, NO1=10}, {NO=1, NO2=z, NO1=10}, {NO=2, NO2=f, NO1=2}]
分享到:
评论

相关推荐

    java数组自定义排序

    java中数组的自定义排序,种类繁多,简单实现,可自由操控。

    Java 类自定义排序

    在本节中,我们将通过一个实体类的示例来演示如何实现自定义排序。 自定义排序的必要性 在 Java 程序中,排序是非常常见的操作。Java 提供了多种排序算法和方法,但是当我们需要对自定义的对象进行排序时,Java 的...

    详解JAVA使用Comparator接口实现自定义排序

    JAVA中Comparator接口是Java Collections Framework中的一个重要接口,它提供了自定义排序的能力。通过实现Comparator接口,我们可以根据自己的需求来定义对象的排序规则。 Comparator接口中最重要的方法是compare...

    文件按照window 的排序规则-Java实现

    如果`quiz`是一个文件,那么它本身不能直接参与排序,但如果我们有一个包含多个文件的目录`quiz`,可以按照上述方法对`quiz`目录下的文件进行排序。 7. **注意点**: - 文件路径应正确处理,避免路径分隔符问题。 ...

    Java实现拖拽列表项的排序功能

    总结一下,Java实现拖拽列表项的排序功能主要包括以下步骤: 1. 启用UI组件的拖放功能,如设置`AllowDrop`、`CanReorderItems`和`IsSwipeEnabled`属性。 2. 监听并处理拖放事件,更新数据模型以反映拖放操作。 3. ...

    java Lucene 中自定义排序的实现

    Lucene中的自定义排序功能和Java集合中的自定义排序的实现方法差不多,都要实现一下比较接口. 在Java中只要实现Comparable接口就可以了.但是在Lucene中要实现SortComparatorSource接口和ScoreDocComparator接口.在...

    Java排序算法包 支持自定义比较条件

    总的来说,这个"Java排序算法包"为开发者提供了一个强大的工具,不仅包含了多种经典的排序算法,还允许用户通过自定义比较器来满足个性化排序需求,从而在不同的场景下都能实现高效且准确的排序。

    ireport交叉报表自定义排序

    1. **通过SQL查询定制排序**:这种方法的核心思想是在SQL查询阶段就对数据进行预处理,从而实现自定义排序。 2. **利用iReport中的Crosstab控件属性**:这种方式是直接在iReport的设计界面中调整Crosstab控件的相关...

    用JAVA实现的8大排序方法,有兴趣的可以一起研究

    本文将探讨在Java中实现的八大排序算法,这些算法在实际应用中各有优势,适用于不同的场景。通过深入理解并实践这些算法,可以提升你的编程技能和算法分析能力。 1. 冒泡排序(Bubble Sort) 冒泡排序是最简单的...

    Java语言实现六种排序算法

    Java中实现选择排序只需一个for循环来遍历未排序部分,再用一个内层循环找到最小元素并进行交换。 3. 插入排序(Insertion Sort) 插入排序的工作原理类似于我们平时玩扑克牌时的排序方式,将待排序元素逐个插入已...

    8种常用排序方法java类实现

    Java实现中,通常使用一个for循环来遍历未排序部分,然后用一个while循环找到已排序部分的合适位置进行插入。 4. **快速排序(Quick Sort)**:快速排序是一种高效的排序算法,采用分治策略。选取一个基准值,将...

    java 中文姓氏 排序

    它可以接受一个可选的比较器参数来进行自定义排序。 #### 三、具体实现 ##### 1. 对象列表按照中文姓氏排序 假设我们有一个 `SysTeacherInfo` 类,其中包含教师的名字 `teachername`,我们需要按照教师的中文姓氏...

    java竞赛中各种自定义排序模板

    在Java编程语言中,特别是在算法竞赛的环境下,经常会遇到需要对数据进行自定义排序的情况。以下将详细讲解三种常见的自定义排序方式: 1. **对象数组排序**: Java不支持像C++那样的结构体,因此当需要处理具有多...

    Java实现八大排序算法

    Java实现插入排序通常用到一个嵌套循环,外层循环遍历整个数组,内层循环用于找到插入位置并移动元素。 4. **希尔排序(Shell Sort)**:希尔排序是插入排序的改进版本,通过设置不同的间隔序列(希尔增量),使得...

    【java自定义排序】.md

    Java自定义排序详解

    java中文排序,数字字母汉字排序

    在Java编程语言中,对包含中文、数字和字母的数据进行排序是一项常见的任务。这个场景下,我们关注的是如何实现一个自定义的排序规则,按照数字...希望这个解答能够满足你的需求,并帮助你深入理解Java中的自定义排序。

    java使用stream对日期排序

    如果需要自定义排序规则,可以创建一个`Comparator&lt;LocalDate&gt;`实例。 4. 自定义日期排序: 如果需要按照特定规则(例如,先按月份排序,再按日期排序)排序,可以这样实现: ```java List&lt;LocalDate&gt; ...

    java中实现Comparable接口实现自定义排序的示例

    这篇文章将为大家带来一个使用 Comparable 接口实现自定义排序的示例。 首先,让我们来了解一下 Comparable 接口。Comparable 接口是 Java 中的一个接口,它定义了一个compareTo 方法,该方法用于比较两个对象的...

    Java针对ArrayList自定义排序的2种实现方法

    Java针对ArrayList自定义排序的2种实现方法 Java语言中提供了多种方式来实现ArrayList的自定义排序,今天我们将介绍其中的两种实现方法。首先,让我们了解一下ArrayList的基本概念。ArrayList是一种动态数组,能够...

Global site tag (gtag.js) - Google Analytics