Sometimes, we would like to sort names alphabetically, followed by length. For example, if we have the following names, the sorting method should sort so that the result is
j
jo
john
james
jonathan
jonathen
gordon
gord
amy
sorted: amy gordon gord jonathan jonathen james john jo j
public static final Comparator<String> nameComparator = new Comparator<String>(){
@Override
public int compare(String o1, String o2) {
int len1 = o1.length();
int len2 = o2.length();
int lim = Math.min(len1, len2);
char v1[] = o1.toCharArray();
char v2[] = o2.toCharArray();
int k = 0;
while (k < lim) {
char c1 = v1[k];
char c2 = v2[k];
if (c1 != c2) {
if(k >= 1){
return len2 - len1;
}
return c1 - c2;
}
k++;
}
return len2 - len1;
}
};
public static void main(String[] args){
ArrayList names = new ArrayList<>();
names.add("j");
names.add("jo");
names.add("john");
names.add("jonathan");
names.add("jonathan");
names.add("james");
names.add("gordon");
names.add("gord");
names.add("amy");
Collections.sort(names, nameComparator);
}
Thanks for reading! and let me know if you have any feedback.