尝试仅使用键的开头从map获取值。如果一个<strings,strings>的haveMap,并且我知道键的开头是“aaa”、“bbb”或“ccc”,有没有方法可以检索该字符串值?
示例Map
“aaa_unknownText”->“Hello world”
“bbb_unknown_Text”->“你好火星”
“ccc_unknown_TEXT”->“你好木星”
想要获取“bbb”的字符串值,即“hello mars”
我的想法是把钥匙放在列表中。然后对每个字符串进行列表检查,直到找到匹配项,并将该Key保存在瓦尔foundKey中。然后使用map.get(foundKey)获取String Value。新到Kotlin想知道是否有不同的方法,也许使用map.filter选项,谢谢!
- 谢谢你的回复!获取了一些代码,目前
map.filterkeys { it.startsWith("bbb") }.toList().map{ it.second }[0]
字符串
键“aaa”、“bbb”和“ccc”在Map中只会出现一次,并且保证会出现。需要将结果值作为字符串,因此将其转换为列表并获得index [0]
1条答案
按热度按时间vktxenjb1#
如果你确定最多只有 * 一个 * 项,其键以给定的字符串开头,你可以使用
firstNotNullOfOrNull
:字符串
如果没有匹配的键,则返回null。
firstNotNullOfOrNull
返回该Map中闭包返回非空值的第一个值,如果闭包为所有条目返回空值,则返回空值。我在这里传递的闭包使用takeIf
。如果条目的键以“aaa”开头,则返回条目的值,否则返回null。如果你有一个以上的匹配键,使用
filterKeys
获取一个删除所有不匹配键的Map,然后获取它们的values
。型
这将为您提供一个
Collection<String>
,其中包含所有与匹配键对应的值。这两种方法都是O(n)时间。Map不应该这样使用。如果没有超过一个匹配的键,并且您需要多次访问Map,我建议您只使用键的开始部分创建一个新的Map。
型
然后你可以查询
newMap
。