2013-11-29 36 views
0

我有ArrayList它包含這麼多的數組,每個數組包含名字,姓氏。現在我想根據姓氏對列表進行排序。如何對ArrayList中的數組進行排序?

例子:

ArrayList<String[]> list=new ArrayList<String[]>(); 
String[] name1={"koti" ,"reddy"}; 
String[] name2={"hanu" ,"sanjay"}; 
String[] name3={"ajay" ,"zedeja"}; 
String[] name4={"basha" ,"kadhar"}; 

list.add(name1); 
list.add(name2); 
list.add(name3); 
list.add(name4); 

我想要的排序順序,如:

basha kadhar 
koti reddy 
hanu sanjay 
ajay zedeja 

能否請您在此幫助儘快,先謝謝了

+0

查看更多關於集合http://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#sort%28java.util.List%29 –

回答

3

編寫自定義Comparator和供應是與適當的sort重載以及數據。

不過,我會建議一個單獨的Person/Name類型,而不是字符串數組,因爲它會使得數據更容易保持的跟蹤它可以實現Comparable(這將消除/替換一個比較的需要)。

現在,編寫適用compare/compareTo時,該代碼應類似於:

int cmpLastName = a_lastName.compareTo(b_lastName); 
if (cmpLastName == 0) { 
    // same lastname, order now based on first name 
    return a_firstName.compareTo(b_firstName); 
} else { 
    // different lastname, so have enough ordering 
    return cmpLastName; 
} 
1

這是我會怎樣執行排序操作。

public static void main(String[] args) { 
    ArrayList<String[]> list = new ArrayList<String[]>(); 
    String[] name1 = { "koti", "reddy" }; 
    String[] name2 = { "hanu", "sanjay" }; 
    String[] name3 = { "ajay", "zedeja" }; 
    String[] name4 = { "basha", "kadhar" }; 

    list.add(name1); 
    list.add(name2); 
    list.add(name3); 
    list.add(name4); 

    System.out.println("Before sorting"); 
    for (String[] r : list) { 
    System.out.println(Arrays.toString(r)); 
    } 
    Collections.sort(list, new Comparator<String[]>() { 
    public int compare(String[] left, String[] right) { 
     if (left == null) { // null? 
     if (right == null) { // null == null! 
      return 0; 
     } 
     return -1; // null < not(null) 
     } else if (right == null) { 
     return 1; // not(null) > null. 
     } 
     // If the last names aren't the same, return the result 
     // of comparing the last names. 
     if (left[1].compareTo(right[1]) != 0) { 
     return left[1].compareTo(right[1]); 
     } 
     // Return the result of comparing the first names. 
     return left[0].compareTo(right[0]); 
    } 
    }); 
    System.out.println("After sorting"); 
    for (String[] r : list) { 
    System.out.println(Arrays.toString(r)); 
    } 
} 
2

試試這個

Collections.sort(list, new Comparator<String[]>() { 
     @Override 
     public int compare(String[] o1, String[] o2) { 
      int c = o1[0].compareTo(o2[0]); 
      if (c != 0) { 
       return c; 
      } 
      return o1[1].compareTo(o2[1]); 
     } 
    }); 
0

試試這個代碼來實現你的輸出。

public static void main(String []args){ 
      ArrayList<String[]> list=new ArrayList<String[]>(); 
    String[] name1={"koti" ,"reddy"}; 
    String[] name2={"hanu" ,"sanjay"}; 
    String[] name3={"ajay" ,"zedeja"}; 
    String[] name4={"basha" ,"kadhar"}; 

    list.add(name1); 
    list.add(name2); 
    list.add(name3); 
    list.add(name4); 
    Collections.sort(list, new Comparator<String[]>() { 
      @Override 
      public int compare(String[] s1, String[] s2) { 
       int i = s1[0].compareTo(s2[0]); 
       if (i != 0) { 
        return i; 
       } 
       return s1[1].compareTo(s2[1]); 
      } 
     }); 
    System.out.println("after sorting"+"\n"); 
    for (String[] s : list) { 
     for(int i=0;i<s.length;i++){ 
     System.out.print(s[i]+"\t"); 
     } 
     System.out.print("\n"); 
     } 



}