Java 分析Kotlin中列表的枚举

Java 分析Kotlin中列表的枚举,java,kotlin,enums,nested-lists,Java,Kotlin,Enums,Nested Lists,我有一个列表枚举,定义如下: 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: Strin

我有一个列表枚举,定义如下:

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> {

            }
    }
}

我是科特林的新手,想知道是否有什么有效的方法来归还这个

这可能是一个可行的实现。将所有枚举及其类型映射到
字符串
,并将其存储为属性。然后只需使用字符串比较来查找搜索输入:

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"))
}

(旁注:我简化了您的代码,并对函数名使用了lowerCamelCase。您也可以直接使用
normalizedValues
而不是
listAll()
,但我决定保留您现有的签名。)

这可能是一个可行的实现。将所有枚举及其类型映射到
字符串
,并将其存储为属性。然后只需使用字符串比较来查找搜索输入:

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"))
}

(旁注:我简化了您的代码,并对函数名使用了lowerCamelCase。您也可以直接使用
normalizedValues
而不是
listAll()
,但我决定保留您现有的签名。)

这太棒了!如果我在enum
D(listOf())
中有第四行,并且我希望它对后面的任何字符串传递true,该怎么办。搜索中。“垃圾”这句话就变得更复杂了。目前
D
甚至不会出现在
listAll
中,您需要在
搜索中实现自定义匹配逻辑。这太棒了!如果我在enum
D(listOf())
中有第四行,并且我希望它对后面的任何字符串传递true,该怎么办。搜索中。“垃圾”这句话就变得更复杂了。目前
D
甚至不会显示在
listAll
中,您需要在
搜索中实现自定义匹配逻辑。
[A.aa, A.ab, A.ac, B.bb, B.bc, B.bd, C.aa, C.bb, C.dd]
true
false