A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始



因工作中遇到过一些比较麻烦的排序,公司有自己的排序规则,所以需要自定义排序,在此做个记录,希望有人能用到.(所有内容都在附件里面,项目可以直接运行测试)

1首先,自定义比较器,里面有固定排序,如下:

/**
         * 自定义的比较器
         *
         * 自定义区域排序:1-华北地区,2-华东地区,3-华南地区,4-华中地区,5-西南地区,6-西北地区,7-东北地区
         * 优先级由高到低,"1"的优先级最高,"7"的优先级最低
         * @return
         */
        @SuppressWarnings("rawtypes")
        public static Comparator customRegionSort() {
                String[] defined = { "华北地区", "华东地区", "华南地区", "华中地区", "西南地区", "西北地区", "东北地区" };
                final List<String> definedOrder = Arrays.asList(defined);
                Comparator cs = new Comparator(){
                        public int compare(Object property1, Object property2) {
                                int io1 = definedOrder.indexOf(property1);
                                int io2 = definedOrder.indexOf(property2);
                                return io1 - io2;
                        }
                };
                return cs;
        }

第二步,写测试方法

        1.对象属性自定义排序测试

        /**

         * 描述:多条件排序(对象属性排序)
         */
        @SuppressWarnings({ "unchecked", "rawtypes"})
        public static void objAttrSortTest() {
                UserInfo u1 = new UserInfo("11","xiaoming","上海市","华南地区");
                UserInfo u2 = new UserInfo("14","wanghong","北京市","华北地区");
                UserInfo u3 = new UserInfo("17","zhongguo","济南市","西北地区");
                UserInfo u4 = new UserInfo("18","zhongHua","济南市","华东地区");
                UserInfo u5 = new UserInfo("20","zhongHua","济南市","华东地区");
                List<UserInfo> ul = new ArrayList<UserInfo>();
                ul.add(u1);ul.add(u2);ul.add(u3);ul.add(u4);ul.add(u5);
        ArrayList<Object> sortFields = new ArrayList<Object>();  
        Comparator customRegionSort = customRegionSort();
        //汉字排序,按a-z字母排序
        Comparator comparator = Collator.getInstance(java.util.Locale.CHINA);
        //数字排序,从低到高(也有从高到低)
        Comparator mycmp1 = ComparableComparator.getInstance();  
        mycmp1 = ComparatorUtils.nullLowComparator(mycmp1);  
        //字母排序,按z-a字母排序
        Comparator highToLow = ComparableComparator.getInstance();
                highToLow = ComparatorUtils.nullHighComparator(highToLow);//倒序
                //sortFields使用add方法添加排序,优先级逐渐降低
                sortFields.add(new BeanComparator("region", customRegionSort)); //优先级-高
        sortFields.add(new BeanComparator("city", comparator)); //优先级-高
        sortFields.add(new BeanComparator("name",highToLow)); //优先级-中
        sortFields.add(new BeanComparator("age",mycmp1)); //优先级-低
        ComparatorChain multiSort = new ComparatorChain(sortFields);  
        Collections.sort(ul,multiSort);  
        for (int i =0;i<ul.size();i++) {  
            System.out.println(ul.get(i));    //输出  
        }
        }
       2.字符串自定义排序测试
      /**
         * 描述:字符串自定义排序测试
         */
        @SuppressWarnings({ "unchecked", "rawtypes" })
        public static void arraySortTest(){
                List<String> strArray = new ArrayList<String>();
                //1-华北地区,2-华东地区,3-华南地区,4-华中地区,5-西南地区,6-西北地区,7-东北地区
                strArray.add("西北地区");//6-西北地区
                strArray.add("东北地区");//7-东北地区
                strArray.add("华南地区");//3-华南地区
                strArray.add("西南地区");//5-西南地区
                strArray.add("华北地区");//1-华北地区
                strArray.add("华中地区");//4-华中地区
                strArray.add("华东地区");//2-华东地区
                Object[] array = strArray.toArray();
                System.out.print("排序前");
                System.out.println("-------------------------------------");
                for(int i = 0; i < array.length; i++){
                        System.out.println(array);
                }
                System.out.print("排序后");
                System.out.println("-------------------------------------");
                Comparator customRegionSort = customRegionSort();
                Arrays.sort(array, customRegionSort);
                for (int i = 0; i < strArray.size(); i++)
                        System.out.println(array);
        }

第三步,写main方法测试

        public static void main(String[] args) {
                objAttrSortTest();//对象属性自定义排序测试
                arraySortTest();//字符串自定义排序测试
        }

附件: customSort.zip (710.76 KB, 下载次数: 17)


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马