List paises = ...; Locale locale = ...; Collator c = Collator.getInstance(locale); c.setStrength(Collator.PRIMARY); Collections.sort(paises, new CollatorComparator(c));
Con una clase propia, CollatorComparator, que implementa la interfaz Comparator podemos hacer la ordenación de una lista de cadenas:
import java.util.Comparator; import java.text.Collator; public class CollatorComparator implements Comparator { private Collator collator; public CollatorComparator(Collator collator) { this.collator = collator; } public int compare(Object o1, Object o2) { return collator.compare(o1, o2); } public boolean equals(Object obj) { return false; } }
Algo importante es la «fuerza» del comprador, que permite ajustar cuales son los caracteres que se consideran diferentes en la comparación. Disponemos de las siguientes posibilidades:
- PRYMARY: Considera como distintos los distintos caracteres («a» vs «b»)
- SECONDARY: Considera como distintos diferentes formas acentuadas («a» vs «á»)
- TERTIARY: Considera como diferentes mayúsculas y minúsculas («a» vs «A»)
- IDENTICAL: Solo se consideran idénticos («a» vs «a»)
java.util.Comparator
java.text.Collator
java.text.RuleBasedCollator