Java 在某些条件下对字符串进行不同排序

Java 在某些条件下对字符串进行不同排序,java,Java,我想知道我怎么能只在某些条件下改变订购方向。在我的例子中,以“BB”开头的字符串应该按另一个方向排序,其他所有字符串都应该按常规排序 我的测试班: public class StringTest { public static void main(String[] args) { SomeClass someClass1= new SomeClass("AA"); SomeClass someClass2= new SomeClass("AB");

我想知道我怎么能只在某些条件下改变订购方向。在我的例子中,以“BB”开头的字符串应该按另一个方向排序,其他所有字符串都应该按常规排序

我的测试班:

public class StringTest {


    public static void main(String[] args) {
        SomeClass someClass1= new SomeClass("AA");
        SomeClass someClass2= new SomeClass("AB");
        SomeClass someClass3= new SomeClass("CB4");
        SomeClass someClass4= new SomeClass("BB7");
        SomeClass someClass5= new SomeClass("BB9");
        SomeClass someClass6= new SomeClass("BB3");
        SomeClass someClass7= new SomeClass("CB3");

        List<SomeClass> list = new ArrayList<SomeClass>();
        list.add(someClass1);
        list.add(someClass2);
        list.add(someClass3);
        list.add(someClass4);
        list.add(someClass5);
        list.add(someClass6);
        list.add(someClass7);

        Collections.sort(list);

        for (SomeClass someClass : list) {
            System.out.println(someClass.getSomeField());
        }
    }

}
公共类StringTest{
公共静态void main(字符串[]args){
SomeClass someClass1=新的SomeClass(“AA”);
SomeClass someClass2=新的SomeClass(“AB”);
SomeClass someClass3=新的SomeClass(“CB4”);
SomeClass someClass4=新的SomeClass(“BB7”);
SomeClass someClass5=新的SomeClass(“BB9”);
SomeClass someClass6=新的SomeClass(“BB3”);
SomeClass someClass7=新的SomeClass(“CB3”);
列表=新的ArrayList();
添加(某些类别1);
添加(someClass2);
添加(someClass3);
添加(someClass4);
添加(某些类别5);
添加(某些类别6);
添加(someClass7);
集合。排序(列表);
for(SomeClass SomeClass:list){
System.out.println(someClass.getSomeField());
}
}
}
我的比较国:

public class SomeClass implements Comparable<SomeClass>
{
  private String someField;

  public int compareTo(final SomeClass o)
  {
    int res = 0;

    if (someField.startsWith("BB"))
    {
      res = o.someField.compareTo(someField);
    }
    else
    {
      res = someField.compareTo(o.someField);
    }
    return res;
  }

}
public类SomeClass实现了可比较的
{
私有字符串字段;
公共int比较(最终等级o)
{
int res=0;
if(someField.startsWith(“BB”))
{
res=o.someField.compareTo(someField);
}
其他的
{
res=someField.compareTo(o.someField);
}
返回res;
}
}
我想要的输出:
AA
AB
BB9
BB7
BB3
CB3
CB4

到目前为止的实际结果:
AA AB
CB3
BB9
BB7
BB3
CB4


Jonny

您需要确保只有当两个元素都以“BB”开头时,比较器才会应用不同的排序。现在,您的比较器应用不同的排序,即使您将“BB9”与“CB3”进行比较,因此后者排序在BB9之前

public class SomeClass implements Comparable<SomeClass>
{
   private String someField;

   public int compareTo(final SomeClass o)
   {
     int res = 0;

     if (someField.startsWith("BB") && o.someField.startsWith("BB"))
     {
       res = o.someField.compareTo(someField);
     }
     else
     {
       res = someField.compareTo(o.someField);
     }
     return res;
   }
}
public类SomeClass实现了可比较的
{
私有字符串字段;
公共int比较(最终等级o)
{
int res=0;
if(someField.startsWith(“BB”)&o.someField.startsWith(“BB”))
{
res=o.someField.compareTo(someField);
}
其他的
{
res=someField.compareTo(o.someField);
}
返回res;
}
}
在您的
比较中尝试此更改,以解决您的问题

if(someField.startsWith("BB") && o.someField.startsWith("BB")))