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