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