Преобразуйте каталог в объект в Котлине - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь проанализировать некоторые файлы следующим образом:

File(tentConfig.getPathRepository())
            .walkTopDown()
            .forEach { file -> processFile(file) }

путь к этому файлу: /communications/email/begginer/.file

Мне нужно преобразовать этот путь к объекту следующим образом:мои сообщения должны быть моей категорией, электронная почта должна быть подкатегорией сообщений и новичок подкатегория электронной почты.

мой метод процесса отвечает засериализовать этот путь к объекту, но я уверен, что есть лучшее решение.

private fun processCategory(currentFile: File) {
    val listOfDirectory = currentFile.path.split("/".toRegex())

    listOfDirectory.forEachIndexed { index, folderName ->
        if (index == 0) {
            val currentCategory = parseYmlFile(currentFile, Category::class)
            lesson.categories.forEach { itCategory ->
                if (itCategory.title != currentCategory.title) lesson.categories.add(currentCategory)
            }

        } else {
            val subCategory = parseYmlFile(currentFile, Category::class)
            lesson.categories[subCategory.index].subcategories.add(subCategory)
        }
    }
}

1 Ответ

0 голосов
/ 04 июня 2018

В целях демонстрации / тестирования моя реализация Category может отличаться от вашей.Вот то, что я использовал:

inner class Category(val s: String, var subCategory: Category? = null)

Теперь, как говорится, вот небольшая функция, которая будет проходить по пути к данному файлу и создавать иерархию категорий, размещая каждый элемент в правильном порядке:

private fun processCategory(currentFile: File): Category? {
        val listOfDirectory = currentFile.path.split("/".toRegex())

        //The root category (in your example, communications)
        var rootCategory: Category? = null
        //A reminder of the current Category, so we can attach the next one to it
        var currentCategory: Category? = null
        listOfDirectory.forEach {
            if (rootCategory == null) {
                //First element, so I need to create the root category
                rootCategory = Category(it)
                currentCategory = rootCategory
            } else {
                //Other elements are simply created
                val nextCategory = Category(it)
                //Added as a subCategory of the previous category
                currentCategory!!.subCategory = nextCategory
                //And we progress within the chain
                currentCategory = nextCategory
            }
        }
        //In the end, my root category will contain :
        // Category("communications", Category("email", Category("Beginner", null)))
        return rootCategory
    }

Вы можете наверняка адаптировать этот код к вашим потребностям, заменив используемый мной конструктор на ваш YmlParser

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...