Парсинг списков списков в Котлине - PullRequest
0 голосов
/ 11 октября 2019

У меня перечисление списков определено следующим образом:

enum class Test(val type: List<String>){
  A(listOf<String>("aa", "ab", "ac")),
  B(listOf<String>("bb", "bc", "bd")),
  C(listOf<String>("aa", "bb", "dd"));
companion object {
            fun Search(type: String?): Boolean {
                val before = type?.substringBefore(".")?.toUpperCase()?.trim()
                val after = type?.substringAfter(".")?.toUpperCase()?.trim()
                return values().any { it.name == normalized }
            }
            fun ListAll(): List<String> {

            }
    }
}

, и мне нужно выполнить две основные операции, Search () и ListAll (). Мой ввод для операции поиска представляет собой строку типа «B.bd», и мой вывод для операции ListAll должен быть

A.aa
A.ab
A.ac
B.bb
B.bc
B.bd
C.aa
C.bb
C.dd

Я новичок в Kotlin, и мне было интересно, есть ли эффективный способ вернуть это.

1 Ответ

2 голосов
/ 11 октября 2019

Это может быть жизнеспособной реализацией. Отобразите все перечисления с их типами в String и сохраните их как собственность. Затем просто воспользуйтесь сравнением строк, чтобы найти входные данные поиска:

enum class Test(val type: List<String>) {
    A(listOf("aa", "ab", "ac")),
    B(listOf("bb", "bc", "bd")),
    C(listOf("aa", "bb", "dd"));

    companion object {
        private val normalizedValues = values().flatMap { value ->
                value.type.map { "${value.name}.$it" }
            }
        fun listAll() = normalizedValues
        fun search(type: String?) = normalizedValues.contains(type)
    }
}

fun main() {
    println(Test.listAll())
    println(Test.search("B.bd"))
    println(Test.search("B.ad"))
}

Вывод:

[A.aa, A.ab, A.ac, B.bb, B.bc, B.bd, C.aa, C.bb, C.dd]
true
false

(Примечание: я немного упростил ваш код и использовал lowerCamelCase для имен функций. Вытакже можно напрямую использовать normalizedValues вместо listAll(), но я решил сохранить ваши существующие подписи.)

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