2014-03-06 40 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())); 

有两种不同的比较,使其保持一致,你得想想一个会是你的标准是可接受的。

相关问题