Java List Sort 集合排序

在 Java 中要針對 List Data 進行排序,

有兩種方式, 一種是採用內建排序方式, 一種是自訂排序方式,

以下透過範例, 針對這兩種方式, 進行說明 :

範例 1 (內建排序: 先大寫字母排序, 再小寫字母排序) :
 程式碼
List list = new ArrayList();

// 增加 List 元素
list.add( "a" );
list.add( "x" );
list.add( "K" );
list.add( "B" );
list.add( "y" );

// List 排序
Collections.sort( list );

// 顯示結果
for( Object obj : list )
   System.out.println( obj );

B
K
a
x
y

範例 2 (自訂排序: 不分大小寫, 由小到大排序) :
 程式碼
List list = new ArrayList();

// 增加 List 元素
list.add( "a" );
list.add( "x" );
list.add( "K" );
list.add( "B" );
list.add( "y" );

// List 自訂排序
Collections.sort( list, new Comparator<Object>(){
    public int compare( Object l1, Object l2 )
    {
        // 回傳值: -1 前者比後者小, 0 前者與後者相同, 1 前者比後者大
        return l1.toString().toLowerCase().compareTo(l2.toString().toLowerCase());
    }
});

// 顯示結果
for( Object obj : list )
   System.out.println( obj );

a
B
K
x
y

範例 3 (自訂排序: 撲克數字由小到大排序, 相同數字, 則比花色由小到大) :
 程式碼
List<Integer> list = new ArrayList<Integer>();

// 增加 List 元素
list.add(10);  // 梅花 J
list.add(38);  // 紅心 K
list.add(12);  // 梅花 K
list.add(28);  // 紅心 3
list.add(15);  // 方塊 3
list.add(20);  // 方塊 8
list.add(40);  // 黑桃 2
list.add(0);   // 梅花 A
list.add(23);  // 方塊 J
list.add(26);  // 紅心 A

// List 自訂排序
Collections.sort( list, new Comparator<Integer>(){
    public int compare( Integer l1, Integer l2 )
    {
        // 回傳值: -1 前者比後者小, 0 前者與後者相同, 1 前者比後者大
        if( l1%13 < l2%13 )      // 數字比大小
            return -1;
        else if( l1%13 > l2%13 ) // 數字比大小
            return 1;
        else
        {
            if( l1/13 < l2/13 )  // 相同數字, 比花色大小
                return -1;
            else
                return 1;
        }
    }
});

// 顯示結果
for( Integer obj : list )
   System.out.println( obj + " = 數字 " + (obj%13+1) + ", 花色  " + (obj/13) );

0  = 數字 1,  花色  0
26 = 數字 1,  花色  2
40 = 數字 2,  花色  3
15 = 數字 3,  花色  1
28 = 數字 3,  花色  2
20 = 數字 8,  花色  1
10 = 數字 11, 花色  0
23 = 數字 11, 花色  1
12 = 數字 13, 花色  0
38 = 數字 13, 花色  2

以上, 參考看看囉.


Related Posts Plugin for WordPress, Blogger...