Sort objects in Java using a case-sensitive string key

I have a requirement to sort objects (Zone) with their names (Zone Name: String), considering the case. I tried this with the Java Comparator interface.

class NameComparator implements Comparator<Zone> {
    public int compare(Zone z1, Zone z2) {
        return z1.getZoneName().compareTo(z2.getZoneName());
   }
}

But this comparator sorts only lexicographically.

Ex: Required zone name order.

['Zone AAa3', 'Zone aaa3', 'Zone BBB7', 'Zone BBb7', 'Zone bbb7']

Current output:

['Zone AAa3', 'Zone BBB7', 'Zone BBb7', 'Zone aaa3', 'Zone bbb7']

Is there any way to achieve this other than writing a method to sort the source object?

+4
source share
2 answers

, , .

public int compare(Zone z1, Zone z2){
  if(z1.getZoneName().toLowerCase().equals(z2.getZoneName().toLowerCase()))
      return z1.getZoneName().compareTo(z2.getZoneName());
  else
      return z1.getZoneName().toLowerCase().compareTo(z2.getZoneName().toLowerCase());
}

-

Comparator<Zone> byName = (z1, z2)->{
    if(z1.getZoneName().toLowerCase().equals(z2.getZoneName().toLowerCase()))
       return z1.getZoneName().compareTo(z2.getZoneName());
    else
       return z1.getZoneName().toLowerCase().compareTo(z2.getZoneName().toLowerCase());
};
+2

. Zone .

Comparator<Zone> byName = Comparator
    .comparing(Zone::getZoneName, String.CASE_INSENSITIVE_ORDER)
    .thenComparing(Zone::getZoneName);
+7

All Articles