猿问

在 Kotlin 中解析列表的枚举

最终,该方法不会编译,因为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>,Object


Collectors.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.aa

A.ab

A.ac

B.bb

B.bc

B.bd

C.aa

C.bb

C.dd

我是 Kotlin 新手,想知道是否有任何有效的方法来返回它。


杨__羊羊
浏览 90回答 1
1回答

烙印99

这可能是一个可行的实施方案。将所有枚举及其类型映射到 aString并将它们存储为属性。然后只需使用字符串比较来查找您的搜索输入:enum class Test(val type: List<String>) {&nbsp; &nbsp; A(listOf("aa", "ab", "ac")),&nbsp; &nbsp; B(listOf("bb", "bc", "bd")),&nbsp; &nbsp; C(listOf("aa", "bb", "dd"));&nbsp; &nbsp; companion object {&nbsp; &nbsp; &nbsp; &nbsp; private val normalizedValues = values().flatMap { value ->&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; value.type.map { "${value.name}.$it" }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; fun listAll() = normalizedValues&nbsp; &nbsp; &nbsp; &nbsp; fun search(type: String?) = normalizedValues.contains(type)&nbsp; &nbsp; }}fun main() {&nbsp; &nbsp; println(Test.listAll())&nbsp; &nbsp; println(Test.search("B.bd"))&nbsp; &nbsp; println(Test.search("B.ad"))}输出:[A.aa, A.ab, A.ac, B.bb, B.bc, B.bd, C.aa, C.bb, C.dd]truefalse(旁注:我简化了你的代码,并使用小驼峰命名法作为函数名称。你也可以直接使用normalizedValues而不是listAll(),但我决定保留你现有的签名。)
随时随地看视频慕课网APP

相关分类

Java
我要回答