我想知道如何才能在某些方面改变排序方向.在我的情况下,以'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());
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的比较者:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我想要的输出:
AA
AB
BB9
BB7
BB3
CB3
CB4
到目前为止的实际结果:
AA AB
CB3
BB9
BB7
BB3
CB4
强尼
只有当两个元素都以"BB"开头时,您才需要确保Comparator应用不同的排序.现在,即使您将"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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
659 次 |
| 最近记录: |