为了账号安全,请及时绑定邮箱和手机立即绑定

在 Kotlin 中解析列表的枚举

在 Kotlin 中解析列表的枚举

杨__羊羊 2023-10-13 17:27:02
最终,该方法不会编译,因为Collectors.toMap()返回Map,而方法签名需要返回类型为SortedMap。我不知道误导性的“静态上下文”错误消息背后的原因;但是当我尝试使用 Gradle 构建代码时,我收到了一条稍微有用的消息。error: incompatible types: inference variable R has incompatible bounds                  .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));                          ^      equality constraints: Map<K,U>      lower bounds: SortedMap<String,String>,ObjectCollectors.toMap()您可能需要接受 a的重载版本Supplier<Map>,以便您可以提供SortedMapfor 输出。我有一个列表枚举,定义如下: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.aaA.abA.acB.bbB.bcB.bdC.aaC.bbC.dd我是 Kotlin 新手,想知道是否有任何有效的方法来返回它。
查看完整描述

1 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

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


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

(旁注:我简化了你的代码,并使用小驼峰命名法作为函数名称。你也可以直接使用normalizedValues而不是listAll(),但我决定保留你现有的签名。)


查看完整回答
反对 回复 2023-10-13
  • 1 回答
  • 0 关注
  • 88 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信