util sort ordered ordenado java string sorting comparator treemap

ordered - Cree un SortedMap en Java con un comparador personalizado



map ordenado java (2)

Quiero crear un TreeMap en Java con un orden de clasificación personalizado. Las claves ordenadas que son cadenas deben ordenarse de acuerdo con el segundo carácter. Los valores también son de cadena.

Mapa de muestra:

Za,FOO Ab,Bar


Puedes usar un comparador personalizado como este:

Comparator<String> secondCharComparator = new Comparator<String>() { @Override public int compare(String s1, String s2) { return s1.substring(1, 2).compareTo(s2.substring(1, 2)); } };

Muestra:

SortedMap<String,String> map = new TreeMap<String,String>(secondCharComparator); map.put("Za", "FOO"); map.put("Ab", "BAR"); map.put("00", "ZERO"); System.out.println(map); // prints "{00=ZERO, Za=FOO, Ab=BAR}"

Tenga en cuenta que esto simplemente supone que la String tiene un carácter en el índice 1. Si no lo hace, arroja StringIndexOutOfBoundsException .

Alternativamente, también puede utilizar esta comparación:

return s1.charAt(1) - s2.charAt(1);

Este "truco" de resta se rompe en general, pero funciona bien aquí porque la resta de dos char no desbordará un int .

Sin embargo, la solución substring y compareTo es más legible.

Ver también:


Suponiendo que no quiere decir Hash como en la función hash o la clasificación ...

Fácilmente podría lograr esto creando una clase "wrapper" para String y anulando el método compareTo