2012-07-18 13 views
6

tengo una lista de ruta de cadena como esta:Java: Cómo crear un árbol de Java, ordred por string path

{ "/ foo", "/ bar", "/ foo/admin", "/ foo/cust", "/ bar/ERP", "/ bar/erp/call", "/ foo/cust/perfil"}

Cómo crear una ruta de árbol de la secuencia ordred? ¿O dónde puedo encontrar un tipo de biblioteca que pueda resolver mis problemas?

la otra parte, es que quiero saber cómo hacer un ciclo contra la estructura para obtener la información que necesito (ej. Un nodo de árbol contendrá una ruta de cadena pero también puede contener una colección de objetos con un atributo de ruta) para que pueda entender que existe una necesidad de una estructura de datos compleja

El árbol puede ser representada así:

-/
-- /foo 
-- -- /foo/admin 
-- -- /foo/cust 
-- -- -- /foo/cust/profile 
-- /bar 
-- -- /bar/erp 
-- -- -- /bar/erp/call 

Gracias

Respuesta

2

probar esto:

import java.util.*; 

public class Main { 
public static void main(String[] args){ 
    List<String> data = Arrays.asList("/foo", "/bar", "/foo/admin", "/foo/cust", "/bar/erp", "/bar/erp/call", "/foo/cust/profile"); 

    // order by path 
    Collections.sort(data, new Comparator<String>(){ 
     @Override public int compare(String o1, String o2) { 
      return o1.compareTo(o2); 
     } 
    }); 

    for (String s : data){ 
     int length = s.split("/").length - 1; // -1 means.. without empty string 
     for (int i=0; i< length; i++){ 
      System.out.print("-- "); 
     } 
     System.out.println(s); 
    } 
} 
} 

// resultado es

-- /bar 
-- -- /bar/erp 
-- -- -- /bar/erp/call 
-- /foo 
-- -- /foo/admin 
-- -- /foo/cust 
-- -- -- /foo/cust/profile 
+0

probados con Java7 – blueiur

6

lo que necesita:

  1. Un bucle principal que itera a través de la matriz de cadenas 1 a la vez desde el principio hasta el final.
  2. Una función de tokenizador que divide una ruta como/foo/bar/sid en una matriz de cadenas {'foo', 'bar', 'sid'}.
  3. Una estructura de árbol (si no sabes cómo representar árboles en la memoria, echa un vistazo a este tutorial de Java: http://vivin.net/2010/01/30/generic-n-ary-tree-in-java/, pero sería beneficioso también mirar una guía independiente del idioma porque te daría una buena visión general de la teoría detrás de él: http://people.cis.ksu.edu/~schmidt/300s05/Lectures/Week7b.html). La parte superior de tu árbol debería ser algo así como 'raíz' ya que foo y bar deberían estar bajo el mismo árbol.

cómo utilizar estas juntas: iterar a través de la matriz principal de 1., pasando cada cuerda a la tokenizer en 2. uno a la vez. Usa la nueva cadena tokenizada para recorrer el árbol usando el primer token como el primer nivel del árbol, segundo como el segundo, etc. a medida que encuentres tokens que no existen en el árbol, agrégalos.

Después de construir el árbol, simplemente iterar a través de él una rama a la vez haciendo eco de su contenido.

¡Salud y feliz codificación!

0

Puedes probar a utilizar con matrices Comparador de esta manera:

String array[]={"/foo", "/bar", "/foo/admin", "/foo/cust", "/bar/erp", "/bar/erp/call", "/foo/cust/profile"}; 

Arrays.sort(array,new Comparator<String>() { 
    @Override 
    public int compare(String o1, String o2) { 
     return o1.compareTo(o2); 
    } 
}); 

for(int i=0;i<array.length;i++){ 
    if(i>0){ 
     if(array[i].startsWith(array[i-1])){ 
      System.out.print("\t"); 
     } 
    } 
    System.out.println(array[i]); 
}