Tengo una Lista de Matrices, como este:

List<String[]> myList = new ArrayList<String[]>();
myList.add( new String[]{"A1","B1","C1","D1","values"} );
myList.add( new String[]{"A1","B1","C2","D1","values"} );
myList.add( new String[]{"A1","B1","C2","D2","values"} );
myList.add( new String[]{"A2","B1","C1","D1","values"} );
myList.add( new String[]{"A2","B1","C1","D2","values"} );

Necesito rellenar Un Objeto que tiene dependencias con los padres, así:

  • A1 tener sólo un hijo, B1.
    • B1 tiene 2 niños, C1 y C2.
      • C1 tienen 1 hijo, D1, que tienen los valores…
      • C2 tiene 2 niños de, D1 y D2, que tienen los valores…
  • A2 tienen sólo un hijo, B1 (No es lo mismo que la otra).
    • B1 tener sólo un hijo, C1… etc.

Qué tipo de estructura que crees que es mejor? Necesito los nombres de A1, B1, etc.

He sonda con Mapas, Matrices, Listas… creo que el algoritmo no es posible… 🙁 🙁

Por favor, AYUDA!

Editar explicando:

Tengo un conjunto de resultados de una Base de datos que tienen 5 o 6 de las cláusulas GROUP BY. Tengo todos los datos sin formato y

Necesito hacer una estructura con Objetos de Texto, por ejemplo:

Person A - Building 1 - Tower 1 - Some Text A

Person A - Building 1 - Tower 2 - Another Text

Person A - Building 2 - Tower 1 - Another one Text

Person A - Building 2 - Tower 3 - My Text

Person B - Building 1 - Tower 2 - Any Text

Person B - Building 3 - Tower 1 - A Text...

Necesito un Objeto de la estructura para este tipo de datos… Es posible?

  • Parece que necesita un trie estructura de datos. Tiene que ser un estándar de Java de la aplicación.
InformationsquelleAutor ganzux | 2011-05-25

3 Comentarios

  1. 3

    YO LO HICE ! OH MI DIOS! 😀 😀 😀 😀 😀 😀 :D…

    private static void finalFillerTotalSuperSpecial(List<String[]> initialList, HashMap<String,Object> mapa){
    String[] currentElement = null;
    String currentKey = null;
    String[] nextElement = null;
    String nextKey = null;
    int i=0,start,end;
    while (i < initialList.size()) {
    start = i;
    currentElement = initialList.get( i++ );
    currentKey = currentElement[0];
    if (i<initialList.size()){
    nextElement = initialList.get( i );
    nextKey = nextElement[0];
    }
    HashMap<String,Object> insideMap = new HashMap<String,Object>(); 
    mapa.put(currentKey, insideMap);
    while (currentKey.equals(nextKey) && i < initialList.size()) {
    currentElement = initialList.get( i++ );
    currentKey = currentElement[0];
    if (i<initialList.size()){
    nextElement = initialList.get( i );
    nextKey = nextElement[0];
    }
    }
    end = i;
    List<String[]> listOfCurrentElements = new ArrayList<String[]>();
    for (int j=start;j<end;j++)
    listOfCurrentElements.add( getNextArray(initialList.get(j)) );
    if ( listOfCurrentElements.get(0).length>1 )
    finalFillerTotalSuperSpecial(listOfCurrentElements,insideMap);
    else
    insideMap.put(listOfCurrentElements.get(0)[0], null);
    }
    }
  2. 2

    Por supuesto que es posible. 🙂

    Creo que lo que usted describe pueden ser resueltos por un genérico o n-ary árbol. Que es un árbol donde cada nodo puede tener cualquier número de hijos. Yo escribió algo que no esta en Java.

    Si usted no quiere construir un árbol que puede generar el uso de un Map<String, Set<String>>. Esto en realidad no te dan fácil acceso al árbol de operaciones, pero se deben mantener las relaciones:

    Map<String, Set<String>> myNodes = new LinkedHashMap<String, Set<String>>();
    for(String[] myArray : myList) {
    String previousNode = null;
    for(String node : myArray) {
    if(myNodes.get(node) == null) {
    myNodes.put(node, new HashSet<String>());
    }
    if(previousNode != null) {
    myNodes.get(previousNode).add(node);
    }
    previousNode = node;
    }
    }

    Así que, esencialmente, de conseguir (yo estoy usando JSON para demostrar):

    {
    A1: ["B1"],
    A2: ["B1"],
    B1: ["C1", "C2"],
    C1: ["D1"],
    C2: ["D1", "D2"],
    D1: ["values"],
    D2: ["values"]
    }

    Esto es mucho más difícil de atravesar, sin embargo, que un árbol.

    • Paliath he leído su implementación y podría ser útil… GenericTreeNode para el elemento de almacenamiento… Ahora me voy a leer a @Péter Török con el algoritmo de…
    • Wow, se ve muy bien pero… la función musnt ser recursivo?
    • Usted puede recorrer un árbol de forma iterativa o recursiva. De forma recursiva parece más fácil para mí. Un proceso iterativo de recorrido requiere de una secundaria de la estructura de datos (nodo de la pila).
    • Ok, tu código funciona, PERO los niños son el mismo… Por ejemplo, con A1 tengo el B1 y tengo el MISMO B1 con A2, y aunque el nombre es el mismo, son diferentes… Por ejemplo, si yo llamo «D1» me sale «valores», pero no sé qué son los valores… Son de A1-B1-C1…
    • Supongo que el problema es que no está claro lo que sus datos se quería representar. Traté de deducir una estructura de árbol a partir de lo que has publicado en tu pregunta. ¿Qué es «valores» que se supone que significa eso? Además, ¿qué quiere decir que los niños son el mismo?
    • Paliath Ok, yo les digo a todos el problema (GRACIAS por su ayuda): ———– tengo un conjunto de resultados de una Base de datos que tienen 5 o 6 de las cláusulas GROUP BY. Tengo todos los datos sin formato y necesito hacer una estructura con Objetos de Texto, por ejemplo: ———– Persona – Edificio 1 – Torre 1 – Texto de Una Persona de Un Edificio – 1 – Torre 2 – Texto de Otro Persona – Edificio 2 – Torre 1 – Otro Texto de Una Persona – Edificio 2 – Torre 3 – Mi Texto a la Persona B – Edificio 1 – Torre 2 – Cualquier Texto a la Persona B – Edificio 3 – Torre 1 – Un Texto… ———— Necesito un Objeto de la estructura de estos datos… Es posible?
    • Se puede agregar como una edición a tu pregunta original? Es difícil leer los comentarios.
    • Paliath, Eso Es 🙂
    • A partir de la observación de sus datos, su mejor apuesta sería la de construir un árbol real.
    • «Árbol real»? Con su algoritmo? Esto no es válido… Es?
    • No con mi algoritmo, pero mediante el uso de un árbol real de la clase.
    • Paliath, OK, voy a hacerlo ahora ! 🙂
    • Paliath, he estado implementando algún tipo de código a través de su estructura y, para mí, creo que es mejor tener un Mapa en lugar de una Lista de nodos debido a que, como se puede ver, no puede repetir 😉
    • Paliath bffffffff… yo estoy tratando de hacerlo pero es demasiado difícil… Donde puedo publicarlos para que alguien me puede ayudar? Gracias

  3. 1

    Así que usted quiere construir una estructura de árbol a partir de esta lista específica de la representación del árbol.

    Como para cualquier estructura de árbol, los nodos pueden tener de 0 a n los niños, así que los niños podes hacer ser almacenados en un List (o, de forma opcional, un Map, si quieres más rápido en la búsqueda del nombre). Para esta tarea, el almacenamiento de los padres de referencia no parece necesario.

    Entonces usted sólo tiene que iterar a través de myList. Para cada elemento de la matriz,

    1. Tomar la raíz de su árbol.
    2. Iterar a través de la matriz.
    3. Para cada cadena de la matriz, compruebe si el actual nodo del árbol tiene un nodo hijo con este nombre.
    4. Si no, crear y añadir al árbol.
    5. Mover el nodo hijo (por lo que se convierte en el nodo actual).
    6. Tomar la siguiente cadena de la matriz y repetir desde el paso 3.
    7. Tomar la matriz siguiente de la lista y repita desde el paso 1.
    • Yo estoy con el algoritmo, pero su complicada… tan pronto Como tengo que hacer algo, yo te aconsejo

Dejar respuesta

Please enter your comment!
Please enter your name here