arn*_*nab 7 java functional-programming gson kotlin
我看到在#filter上定义了它Map,但是我不知道如何使用它。有人愿意分享一个例子吗?
我有一个深度嵌套的TreeMap实例(TreeMap<String, Map<String, Map<*, *>>>),我想要filter/find第一个(这是该域中唯一的)顶级键,该键具有某些与值更深的内容相关的特征。
数据如下所示:
{
"i1": {
"aliases": {}
},
"i2": {
"aliases": {}
},
"i3": {
"aliases": {}
},
"i4": {
"aliases": {
"alias-im-looking-for": {}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我有以下以下非功能性代码可立即解决该问题:
val indexToAliasMappingType = LinkedTreeMap<String, Map<String, Map<*, *>>>()
val indexToAliasMappings = Gson().fromJson(response.jsonString, indexToAliasMappingType.javaClass)
var currentIndexName = ""
for ((index, aliasMappings) in indexToAliasMappings) {
val hasCurrentAlias = aliasMappings.get("aliases")?.containsKey(alias)
if (hasCurrentAlias != null && hasCurrentAlias) {
currentIndexName = index
}
}
return currentIndexName
Run Code Online (Sandbox Code Playgroud)
看起来您需要的是符合您的条件的第一个条目的关键部分。这样的事情(单行故意)应该会有所帮助:
val currentIndexName = indexToAliasMappings.filterValues { it["aliases"]?.containsKey(alias) ?: false }.keys.firstOrNull() ?: ""
Run Code Online (Sandbox Code Playgroud)
你不能firstOrNull在地图上调用它,但你可以在它的entries集合上调用它:
val currentIndexName = indexToAliasMappings.entries.firstOrNull {
it.value["aliases"]?.containsKey(alias) == true
}?.key
Run Code Online (Sandbox Code Playgroud)
firstOrNull遍历映射条目并在与谓词匹配的第一个条目上停止。此处不需要像带有filter或的变体那样进行中间映射分配filterValues。
| 归档时间: |
|
| 查看次数: |
5302 次 |
| 最近记录: |