在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
比较器
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,因为最后一个字母应该是降序的