I wondered how I can change the direction of the order only on some conditional. In my case, Lines starting with "BB" should be ordered in the other direction, everything else should be ordered, as usual.
My test class:
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()); } } }
My comparator:
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; } }
My desired result:
AA
Ab
BB9
BB7
BB3
CB3
CB4
Actual result:
A.A. Ab
CB3
BB9
BB7
BB3
CB4
Johnny
source share