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.

  • Android Studio 3.0 que respalda a Kotlin: actividad como context
  • Las testings instrumentadas no se pueden ejecutar en modules de biblioteca Android que tengan files Kotlin
  • Las properties de extensión Kotlin no funcionan en Kotlin script
  • Kotlin Decompiler genera código erróneo - ¿Es posible prevenir?
  • Clase de datos que henetworkinga de la class Java
  • Tokens inesperados (uso; para separar expresiones en la misma línea) en kotlin
  • Custom Type Face en Kotlin por progtwig
  • Kotlin: Superclass no es accesible desde el rasgo
  • agregar fragment en la actividad del fragment no funciona en Pixel XL versión de Android 8.0.0
  • Kotlin Closable y SQLiteDatabase en Android
  • Observable.just () que devuelve Unidad en Kotlin