kotlin - 检查映射是否包含子字符串。 Kotlin

标签 kotlin hashmap

我有一个

val map = Map<String,String>
map.put("Nurseiyt","android")

我想通过 subString 获取一个值,例如:

map["Nurs"] 应该返回 "android"

这可能吗?

最佳答案

使用kotlin.Collections,有filter之类的方法。

有两件事 - 最好使用正则表达式。因此,您甚至可以更好地控制返回的内容。第二个,可以有多个元素与该正则表达式匹配。这就是我返回列表的原因。

fun <T> substringKey(map: Map<String, T>, regex: Regex): List<T> {
    return map.filter { it.key.contains(regex) }
        .map { it.value }
}

如果您想使用该表示法,您需要创建自己的 map 并覆盖适当的运算符。值得注意的是,你不能返回值列表。因此,在这种情况下,我只返回第一个找到的值。

class SubstringMap<V> : HashMap<String, V>() {
    override operator fun get(key: String): V? {
        return this.entries.first { it.key.contains(key) }.value
    }
}

fun main() {
    val map = SubstringMap<String>()
    map["Nurseiyt"] = "android"
    println(map["Nurs"]) // "android"
}

最后一件事 - 在 kotlin 中,您可以创建自己的运算符,例如 withKeyPart。这比覆盖默认运算符要好得多(因为我不希望 [] 运算符以与平常不同的方式工作。

infix fun <V> Map<String, V>.withKeyPart(keyPart: String): List<V> {
    return this.filter { it.key.contains(keyPart) }
        .map { it.value }
}

然后这样调用它:

fun main() {
    val map = HashMap<String, String>()

    map withKeyPart "KeyPart" // infix notation
    map.withKeyPart("KeyPart") // standard call
}

关于kotlin - 检查映射是否包含子字符串。 Kotlin ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57704099/

相关文章:

android - 使用 Kotlin 进行 Espresso 测试

android - 在 RTL 中测量自定义 View 中的子项中断

kotlin - 我如何使用集合运算符在 Kotlin 中按日期删除对象列表中的重复项?

Java嵌套ConcurrentHashMap是线程安全的吗?

java - 由于值被清除,无法从使用数组列表的 HashMap 中获取值

Kotlin 嵌套时

android - 如何使用 Kotlin 让 Android 设备进入休眠状态或以编程方式按下电源按钮?

perl - 查找与特定键匹配的嵌套哈希值

java - 为什么静态 hashmap 在下面的情况下总是 null

java - 为什么在 HashMap 迭代期间,更改键/值对的值不会抛出 ConcurrentModificationException?