Buenas,
Está muy bien y es más DRY, solo le veo dos pegas de funcionamiento:
-Si un elemento de la lista es null explota con un NullPointerException.
-Da prioridad a las palabras con menos letras, que no es lo que se busca.
Por ejemplo, con la lista del ejemplo de este post devuelve esta ordenación:
[bc, acd, a%c, bdc, 12a]
Cuando debería devolver ésta:
acd, a%c, bc, bdc, 12a
Para arreglarlo basta con desplazar el if de la longitud después del bucle.
Código Java:
Ver original@Override
int length = o1.length();
int compare;
for (int i = 0; i < length; i++) {
compare = compare(o1.charAt(i), o2.charAt(i));
if (compare != 0) {
return compare;
}
}
if (o2.length() != length) {
return length - o2.length();
}
return 0;
}
Un saludo