2015-10-19 48 views
0

所以我有一個簡單的ArrayList,我想按字母順序排序,這部分我下。沒有麻煩,問題是,列表中的名稱之前有一個ID號。我需要根據字母排序。任何幫助表示讚賞,見下文。排序的ArrayList忽略位做到這一點的字母順序

student.add("01, Pentecoast"); 
    student.add("02, Walker"); 
    student.add("03, Smith"); 
    student.add("04, Gonzalez"); 
    student.add("05, Kylekorn"); 
    student.add("06, Queen"); 
    student.add("07, Divan"); 
    student.add("08, Homero"); 
    student.add("09, Flanders"); 
    student.add("10, Simpsons"); 

我整理的方法是:

Collections.sort(students, String.CASE_INSENSITIVE_ORDER); 

但他們得到的數字的方式。

+2

您可以創建自定義['Comparator'(http://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html),將分割你的字符串和比較基礎上,第二個標記。 –

+0

我不知道該怎麼做。 –

+1

開始學習。見https://docs.oracle.com/javase/tutorial/collections/interfaces/order.html –

回答

2

我想你想定製Comparator,但讓我們定義和初始化List。喜歡的東西,

List<String> student = new ArrayList<>(); 
student.add("01, Pentecoast"); 
student.add("02, Walker"); 
student.add("03, Smith"); 
student.add("04, Gonzalez"); 
student.add("05, Kylekorn"); 
student.add("06, Queen"); 
student.add("07, Divan"); 
student.add("08, Homero"); 
student.add("09, Flanders"); 
student.add("10, Simpsons"); 

然後處理nullsplit。比較數字後面的文字。喜歡的東西,

Collections.sort(student, new Comparator<String>() { 
    @Override 
    public int compare(String o1, String o2) { 
     if (o1 == null) { 
      return o2 == null ? 0 : -1; 
     } else if (o2 == null) { 
      return 1; 
     } 
     String[] o1Arr = o1.split(", "); 
     String[] o2Arr = o2.split(", "); 
     return o1Arr[1].compareTo(o2Arr[1]); 
    } 
}); 
System.out.println(student); 

輸出是按名稱排序(我得到的,格式化爲這個職位)

[07, Divan, 09, Flanders, 04, Gonzalez, 08, Homero, 
05, Kylekorn, 01, Pentecoast, 06, Queen, 10, Simpsons, 
03, Smith, 02, Walker] 
+0

完美的,謝謝你花時間來真實地解釋事情。最後它有很大的幫助,我不確定我是否可以像這樣分割線。在arraylists上。謝謝。 –

0

你應該定義自己的比較,其比較的第一個非數字字符,並進行相應的分類。

Collections.sort(students, new Comparator<String>() { 
    @Override 
    public int compare(String item1, String item2) { 
     return item1.split(", ")[1].compareTo(item2.split(", ")[1]); 
    } 
}); 
+0

感謝您的幫助的選擇。 –

1

既然你只想名字沒有ID值進行比較,你可以串的部分學生姓名的你想在一個自定義的比較:

Comparator<String> comparator = new Comparator<String>(){ 

    @Override 
    public int compare(final String sid1, final String sid2){ 
     return sid1.substring(4).compareTo(sid2.substring(4)); 
    } 
}; 

您可以按這樣的:

Arrays.sort(students, comparator); 
+0

這對理解需要完成的工作非常有幫助。 –