Jerarquía de nodo de la list de routes de directory

Hola, bash build una jerarquía de nodos basada en la estructura del directory:

/first/ /first/second /first/third /first/third/forth /first/third/fifth /first/sixth /first/sixth/seventh /first/eighth /first/ninth 

Estoy tratando de get una jerarquía de nodo similar a esto:

 first second third forth fifth sixth seventh eighth ninth 

Estoy usando Kotlin para esto, todavía soy relativamente nuevo en Java y Kotlin, así que tengan paciencia conmigo.

Nota: estoy usando FileTreeWalk para get los directorys

 fun getDirs(directoryName: String): MutableList<String> { val ret = mutableListOf<String>() File(directoryName).walk().forEach { if (it.isDirectory) { ret.add(it.toString()) } } return ret } 

En este momento, todo lo que tengo es esto (Genera una jerarquía plana):

 private fun nodesFromPathList(dirPaths: MutableList<String>) : Tree.Node { val ret = Tree.Node("root") for (dir in dirPaths) { ret.add(Tree.Node(dir)) } return ret } 

¿Algunas ideas?

Decidí poner todos los nodos en un map y conectar los nodos.

  /** * Creates a node hierarchy from list of paths */ private fun nodesFromPathList(dirPaths: MutableList<String>) : Tree.Node? { var ret : Tree.Node? = null val nodeMap = mutableMapOf<String, Tree.Node>() // Add a node for each directory path and put it into a map for (dir in dirPaths) { val newNode = Tree.Node(nodeName(dir), skin) if (ret == null) ret = newNode nodeMap.put(dir, newNode) } // Go through each one and add the child nodeMap.forEach { val parent = parentPath(it.key) try { nodeMap[parent]!!.add(it.value) } catch (e: NullPointerException) { println("Parent not found") } } return ret } /** * Returns current path * "D:\dir\to\apath" ==> "apath" */ fun nodeName(path: String): String { return path.split("\\").last() } /** * Returns the parent path * D:\dir\to\apath ==> D:\dir\to */ fun parentPath(path: String): String { val split = path.trim('\\').split("\\") var ret = "" for (i in 0..split.size-2) { ret += split[i] + "\\" } return ret.trim('\\') } 

Puse la ruta en la key y el nodo en tree en el valor. Iterated a través del map y conectado a los niños en function del padre. Ejemplo de map .:

 [D:\android\assets=Tree$Node@56eb1af5, D:\android\assets\Assets\abc=Tree$Node@48e3456d, D:\android\assets\Assets\abc\bcd=Tree$Node@3e532818, D:\android\assets\Assets\abc\cde=Tree$Node@16b07083] 

Encontraría el padre de la key (dividiendo la cadena) y luego estableceré el padre.

  • Sobrecarga de generics de interfaz
  • ¿Cómo acceder a Mono <T> mientras se maneja la exception con onErrorMap ()?
  • Cómo usar "setTextColor (hexaValue)" en Kotlin para Android,
  • Cómo configurar Mockito para Kotlin y Android
  • Escriba un problema de interferencia con WebFlux WebTestClient y Kotlin
  • usando Room con kotlin, obtén una exception cuando construyas la database
  • ¿Cómo get opciones personalizadas en el plugin de protocolos para Java?
  • cómo especificar el order de plugin de comstackdor maven
  • Clase de Android no encontrada Intermiten y se extienden a través del código
  • Kotlin getParcelableArray del set de bashs no puede convertirlo en tipo personalizado
  • El context no se puede proporcionar sin un método @ Provides- o @ Produces-anotado en kotlin