kotlin - 检查 map 是否包含子字符串。科特林
问题描述
我有一个
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 }
}
如果您想使用该符号,您需要创建自己的地图并覆盖正确的运算符。值得注意的是,你不能返回值列表。所以,在这种情况下,我只返回第一个找到的值。
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
}
推荐阅读
- php - How to store data.id to php variable
- r - R从函数调用中获取参数名称
- amazon-web-services - Is secretAccessKey necessary in awsmobile configure?
- reactjs - Uploaded photo not appearing in firefox
- typo3-8.x - Google sitemap with tx_news
- c# - How can I get the result of my work in a Task
- c++ - C++双重枚举值赋值
- php - Wordpress 使用 single.php 和 page.php 而不是 index.php 作为主页
- android - how to parse json that has a child and child
- android - bottomsheetbehavior 中的 NullPointerException(仅在发布变体中)