1. 要求

对List列表中的数据进行排序(正序、倒序),列表中的数据包括:整型(Integer)、字符串(String)、日期(Date)等。对于字符串,要求允许对它按照整型进行排序。

2. 实现思路

1. 对于整型、字符串、日期等数据,可以直接调用Collections.sort方法实现排序(正序、倒序)。

2. 对于字符串按照整型排序,可以写一个类实现Comparable接口,在compare方法中将字符转换为整型进行比较;然后再调用Collections.sort的方法,传进一个Comparator来实现。

3. 实现代码

package com.clzhang.sample.collections;

import java.util.*;

public class CollectionSortTest {
    // 字符串按照整型排序比较器
    static class Str2IntComparator implements Comparator<String> {
        private boolean reverseOrder; // 是否倒序
        public Str2IntComparator(boolean reverseOrder) {
            this.reverseOrder = reverseOrder;
        }
        
        public int compare(String arg0, String arg1) {
            if(reverseOrder) 
                return Integer.parseInt(arg1) - Integer.parseInt(arg0);
            else 
                return Integer.parseInt(arg0) - Integer.parseInt(arg1);
        }
    }

public static void main(String[] args) throws Exception {
        // 生成测试数据
        List<String> list = new ArrayList<String>();
        list.add("1001");
        list.add("1002");
        list.add("1003");
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("11");
        list.add("12");
        list.add("13");
        
        // 整型、字符串、日期都是类似的操作;下面只给出字符串的示范
        System.out.println("当前顺序...");
        System.out.println(list);
        
        Collections.sort(list);
        System.out.println("默认排序后...");
        System.out.println(list);
        
        Collections.sort(list, Collections.reverseOrder());
        System.out.println("倒序后...");
        System.out.println(list);

        Collections.sort(list, new Str2IntComparator(false));
        System.out.println("按整型排序后...");
        System.out.println(list);

        Collections.sort(list, new Str2IntComparator(true));
        System.out.println("按整型倒序后...");
        System.out.println(list);
    }
}

输出:

当前顺序...
[1001, 1002, 1003, 1, 2, 3, 11, 12, 13]
默认排序后...
[1, 1001, 1002, 1003, 11, 12, 13, 2, 3]
倒序后...
[3, 2, 13, 12, 11, 1003, 1002, 1001, 1]
按整型排序后...
[1, 2, 3, 11, 12, 13, 1001, 1002, 1003]
按整型倒序后...
[1003, 1002, 1001, 13, 12, 11, 3, 2, 1]