Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中,如何对列表的第一个字母升序和最后一个字母降序排序?_Java_List_Sorting - Fatal编程技术网

在java中,如何对列表的第一个字母升序和最后一个字母降序排序?

在java中,如何对列表的第一个字母升序和最后一个字母降序排序?,java,list,sorting,Java,List,Sorting,我有一个值列表 阿尔弗雷德 1阿尔弗雷德 1alfredc 2benb 2benc 2benb 我希望列表按第一个字母升序和最后一个字母降序排序,这样排序后的列表 1alfredc 1阿尔弗雷德 阿尔弗雷德 2benc 2benb 2bena 我如何用java实现它?Plz帮助。您可以使用并指定升序或降序的比较器 List<String> list = new ArrayList<String>(); Collections.sort(list, new Com

我有一个值列表

  • 阿尔弗雷德
  • 1阿尔弗雷德
  • 1alfredc
  • 2benb
  • 2benc
  • 2benb
我希望列表按第一个字母升序和最后一个字母降序排序,这样排序后的列表

  • 1alfredc
  • 1阿尔弗雷德
  • 阿尔弗雷德
  • 2benc
  • 2benb
  • 2bena
我如何用java实现它?Plz帮助。

您可以使用并指定升序或降序的
比较器

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

Collections.sort(list, new Comparator<Item>() {
  @Override
  public int compare(String s1, String o2) {
    return s1.compareTo(s2);
  }
});
List List=new ArrayList();
Collections.sort(list,newcomparator(){
@凌驾
公共整数比较(字符串s1、字符串o2){
返回s1.compareTo(s2);
}
});

它可能看起来像这样

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()));
public FirstLetterComparator实现Comparator{
公共整数比较(左字符串、右字符串){
字符串leftFirst=left.substring(0,1);
String rightFirst=right.substring(0,1);
返回左。比较(右优先)&;
}
}
公共LastLetterComparator实现Comparator{
字符串leftLast=left.substring(left.length-2,left.length-1);
字符串rightLast=right.substring(right.length-2,right.length-1);
返回leftLast.compareTo(rightLast);
}
List yourList=new ArrayList();
排序(yourList,newfirstlettercomparator());
Collections.sort(yourList,Collections.reverseOrder(new LastLetterComparator());

有两种不同的比较器使其一致。您必须考虑一种符合您的标准的比较器。

未测试它,类似的东西应该可以工作

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) )
  }
});
Collections.sort(列表,新比较器(){
公共整数比较(字符串e1、字符串e2){
int c=新字符(e1.chartAt(0)).compareTo(e2.charAt(0));
如果(c!=0)
返回c;
返回新字符(e2.chartAt(e2.length()-1)).compareTo(e1.charAt(e1.length()-1))
}
});

只需实现您自己的比较器。但我认为这个命令没有任何意义。如果出现
1alfreda
1alfreca
,您会怎么做?所以您只想按第一个字母和最后一个字母排序?中间什么都没有?”ABA'和AZA'是相等的吗?您应该在第二次比较中交换e1和e2,因为最后一个字母应该是降序的