Java Poner en orden específico al mapa de árbol

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.

preguntado el 12 de junio de 12 a las 19:06

Entonces, ¿quieres que TODOS permanezcan en la cima sin importar lo que agregues? -

¿Desea ordenar el resto (las entradas que no sean key='ALL')? -

4 Respuestas

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

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

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

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 or haz tu propia pregunta.