2015-11-25 25 views
0

二維字符串數組我有填充有在Java字符串的二維陣列。我希望能夠將整個數組相對於我選擇排序的列進行排序。排序與Arrays.sort基於一所選列

例如:

說我有數據的Array,看起來像這樣。

|John | C | Doe | 

|Sally | A | Miller | 

|Chris | B | Sanders| 

我指定我想根據它們的中間初始值以降序排序,並返回一個看起來像這樣的數組。

|John | C | Doe | 

|Chris | B | Sanders| 

|Sally | A | Miller | 

有沒有辦法指定一個比較器來做到這一點?

回答

1

當然,只是通過列索引在作爲比較的參數。

class ColumnComparator<T extends Comparable<T>> implements Comparator<T[]> { 
    private final int column; 

    ColumnComparator(int column) { this.column = column; } 

    @Override public int compare(T[] a, T[] b) { 
    return a[column].compareTo(b[column]); 
    } 
} 

,或者更簡單地說,如果它始終是第1列和字符串數組:

class ColumnComparator implements Comparator<String[]> { 
    @Override public int compare(T[] a, T[] b) { 
    return a[1].compareTo(b[1]); 
    } 
} 
+0

另一種快速的問題。這仍然可以在Java 6實現中起作用嗎? –

+0

我不明白爲什麼它不會。泛型在Java 5中出現; Comparator和Comparable都在Java 1.2中。 –

+0

謝謝你的快速和翔實的迴應:) –

0

import java.util.Arrays; 
import java.util.Comparator; 

public class Main { 
    public static void main(String[] args) { 
     String[][] array = {{"John", "C", "Doe"}, {"Sally", "A", "Miller"}, {"Chris", "B", "Sanders"}}; 
     Arrays.sort(array, new IndexComparator(0)); 
     for(int i = 0; i < array.length; i++) { 
      System.out.println(array[i][0]); 
     } 
    } 
} 

class IndexComparator implements Comparator { 
    private int index = 0; 

    public IndexComparator(int index) { 
     this.index = index; 
    } 


    @Override 
    public int compare(String[] o1, String[] o2) { 
     return o1[index].compareTo(o2[index]); 
    } 
}