在 Kotlin 中解析列表枚举
Parsing enum of Lists in Kotlin
我有一个列表的枚举定义如下:
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()。我对 Search 操作的输入是一个像 "B.bd" 这样的字符串,我对 ListAll 操作的输出应该是
A.aa
A.ab
A.ac
B.bb
B.bc
B.bd
C.aa
C.bb
C.dd
我是 Kotlin 的新手,想知道是否有任何有效的方法 return 这个。
这可能是一个可行的实现。将所有枚举及其类型映射到 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()
,但我决定保留您现有的签名。)
我有一个列表的枚举定义如下:
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()。我对 Search 操作的输入是一个像 "B.bd" 这样的字符串,我对 ListAll 操作的输出应该是
A.aa
A.ab
A.ac
B.bb
B.bc
B.bd
C.aa
C.bb
C.dd
我是 Kotlin 的新手,想知道是否有任何有效的方法 return 这个。
这可能是一个可行的实现。将所有枚举及其类型映射到 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()
,但我决定保留您现有的签名。)