有没有办法检查HashMap是否包含一组键,这些键在数组中给出了哪些键。当我尝试类似下面的代码时,它返回false。
map.containsKey(arrayOf("2018-01-16"))
如果我尝试以下代码它可以工作,但我需要检查密钥和我需要搜索的密钥数量是不固定的。
map.containsKey("2018-01-16")
答案 0 :(得分:2)
您可以从密钥本身开始,并使用标准库中的all
函数:
Map
如果您经常这样做,并希望在fun <K, V> Map<K, V>.containsKeys(keys: Array<K>) = keys.all { this.containsKey(it) }
val containsAllKeys = map.containsKeys(arrayOf("2018-01-16", "2018-01-17"))
类型上使用此功能,您可以随时将其添加为扩展程序:
Iterable<K>
您可能还希望使用另一个以nav-pills
作为参数的函数来重载扩展名。
答案 1 :(得分:1)
Map
有keys
个集合,每个集合实现containsAll
方法,因此您可以使用它来检查keys
集合是否包含所有键:< / p>
map.keys.containsAll(keysArray.asList())
答案 2 :(得分:0)
您可以使用ArrayList<T>
作为键,因为它等于Array<T>
的不同。我们来看看这个测试:
class ExampleUnitTest {
@Test
fun arrayAsKeyTest() {
val hashMapOne = HashMap<Array<String>, Int>()
val stringKeysOne1 = arrayOf("a", "b")
hashMapOne.set(stringKeysOne1, 2)
val stringKeysOne2 = arrayOf("a", "b")
// NOT MATCH! As stringKeysOne1 == stringKeysOne2 is false
assertFalse(hashMapOne.containsKey(stringKeysOne2)) // NOT MATCH
val hashMapTwo = HashMap<ArrayList<String>, Int>()
val stringKeysTwo1 = arrayListOf("a", "b")
hashMapTwo.set(stringKeysTwo1, 2)
val stringKeysTwo2 = arrayListOf("a", "b")
// MATCH! As stringKeysTwo1 == stringKeysTwo2 is true (although stringKeysTwo1 === stringKeysTwo2 is false)
assertTrue(hashMapTwo.containsKey(stringKeysTwo2)) // MATCH
}
}