Java Poner en orden específico al mapa de árbol
Frecuentes
Visto 1,201 veces
4
Tengo una lista grande y la puse en un diagrama de árbol.
Luego quiero poner "TODOS" en la parte superior de la lista, pero hay "AAA" algo que viene antes de "TODOS"
editar: Y quiero que se ordenen todas las demás entradas
List -> List
----- -----
AAA AAA
BBB ALL
CCC BBB
CCC
Podría usar arrayList o algo más, pero me preguntaba si hay alguna forma de controlar esta situación.
4 Respuestas
6
Una opción sería crear un comparador personalizado que siempre clasifique la palabra "TODO" antes que todo lo demás:
TreeMap<String, T> myMap = new TreeMap<String, T>(new Comparator<String>() {
public int compare(String lhs, String rhs) {
/* See which of the inputs, if any, are ALL. */
bool oneAll = lhs.equals("ALL");
bool twoAll = rhs.equals("ALL");
/* If both are ALL or neither are ALL, just do a normal comparison. */
if (oneAll == twoAll) {
return lhs.compareTo(rhs);
}
/* Otherwise, exactly one of them is ALL. Determine which one it is and
* react accordingly.
*/
else if (oneAll) {
return -1;
} else {
return +1;
}
}
});
Esto ordenará todo en orden ascendente, pero priorizará "ALL"
por encima de todo lo demás.
¡Espero que esto ayude!
Respondido el 12 de junio de 12 a las 19:06
4
No use TreeMap
, básicamente. Si desea poner las cosas en un orden específico, simplemente use un ArrayList
o con una LinkedList
preferiblemente. TreeMap
ordena sus entradas en el orden de sus claves. No quieres eso en este caso.
EDITAR: Si eres a unos preocupado por poner TODO en la parte superior, entonces un comparador personalizado está bien. Pero si realmente desea poder especificar la posición de cada entrada de una manera que no se determine fácilmente simplemente por las teclas involucradas, mantengo mi sugerencia de que TreeMap
no es el camino a seguir.
Respondido el 12 de junio de 12 a las 19:06
Creo que el OP quiere tener todo ordenado, pero para "ALL"
llegar siempre a lo más alto. Si ese es el caso, esta solución podría no ser ideal. - templatetypedef
Totalmente en desacuerdo. Si no podemos controlar el orden de inserción, TreeMap es ideal. Es por eso que hay una interfaz Comparator< T >. - Juez mental
@JudgeMental: Depende de si el orden se debe a la clave en sí o a alguna opción externa. Si es a unos un caso de "TODO" viene antes que todo, entonces eso se puede hacer con un Comparator
. Si necesita datos distintos a los que están en la clave, no es realmente apropiado. - jon skeet
1
Podrías escribir el tuyo propio compareTo()
para que TODO siempre llegue a la cima
Respondido el 12 de junio de 12 a las 19:06
1
El uso de LinkedHashMap le permitiría mantener el mismo orden que el elemento agregado al mapa. Si necesitas un pedido personalizado puedes utilizar tu propio Comparador con TreeMap.
Respondido el 12 de junio de 12 a las 19:06
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas java string collections treemap or haz tu propia pregunta.
Entonces, ¿quieres que TODOS permanezcan en la cima sin importar lo que agregues? - tgoossens
¿Desea ordenar el resto (las entradas que no sean key='ALL')? - user845279