2014-03-06 66 views
0

我有值的列表如何排序列表中的第一個字母升序和最後一個字母在java中減少?

  • 1alfreda
  • 1alfredb
  • 1alfredc
  • 2benb
  • 2benc
  • 2benb

我要整理出來的列表作爲第一個字母升序和最後一個字母降序如此t他排序列表是

  • 1alfredc
  • 1alfredb
  • 1alfreda
  • 2benc
  • 2benb
  • 2bena

我如何能做到這一點在Java中? Plz的幫助。

+0

只是實現自己的比較。但我認爲這個命令沒有任何意義。 「1alfreda」和「1alfreca」的情況下你做了什麼? – Danstahr

+0

所以你只想排序第一個和最後一個字母?之間沒有什麼? 'ABA'和'AZA'是否被認爲是相等的? –

回答

1

沒有測試過,這樣的事情,應該工作。

Collections.sort(list, new Comparator<String>() { 
    public int compare(String e1, String e2) { 
    int c = new Character(e1.chartAt(0)).compareTo(e2.charAt(0)); 
    if(c!=0) 
     return c; 
    return new Character(e2.chartAt(e2.length()-1)).compareTo(e1.charAt(e1.length()-1)) 
    } 
}); 
+2

你應該在第二次比較中交換e1和e2,因爲最後一個字母應該是降序 – JohnnyAW

+1

@JohnnyAW,謝謝。 editted。 – yavuzkavus

0

你可以使用Collections.sort()然後指定Comparator其中升序或降序。

List<String> list = new ArrayList<String>(); 

Collections.sort(list, new Comparator<Item>() { 
    @Override 
    public int compare(String s1, String o2) { 
    return s1.compareTo(s2); 
    } 
}); 
0

它可能看起來像這樣。

public FirstLetterComparator implements Comparator<String>{ 
    public int compare(String left, String right){ 
      String leftFirst = left.substring(0,1); 
      String rightFirst = right.substring(0,1); 


      return left.compareTo(rightFirst) && ; 
    } 

} 
public LastLetterComparator implements Comparator<String>{ 
      String leftLast = left.substring(left.length-2,left.length-1); 
      String rightLast = right.substring(right.length-2,right.length-1); 
     return leftLast.compareTo(rightLast); 

} 

List<String> yourList = new ArrayList<String>(); 
Collections.sort(yourList,new FirstLetterComparator()); 
Collections.sort(yourList,Collections.reverseOrder(new LastLetterComparator())); 

有兩種不同的比較,使其保持一致,你得想想一個會是你的標準是可接受的。

相關問題