我希望能够检查集合是否a包含的所有元素,但基于相等性的检查是不够的;例如:b
data class Person(val name: String, val age: Int)
val a = listOf(Person("Alice", 10), Person("Bob", 13))
val b = listOf(Person("Alice", 10), Person("Alice", 10))
fun main() {
println(a.containsAll(b))
}
Run Code Online (Sandbox Code Playgroud)
真的
虽然这在技术上是可行的 true,但这不是我想要的结果,因为a只包含一个Person("Alice", 10),而b包含其中两个。
上面的例子应该失败,而下面的例子应该通过。
data class Person(val name: String, val age: Int)
val a = listOf(Person("Alice", 10), Person("Alice", 10), Person("Bob", 13))
val b = listOf(Person("Alice", 10), Person("Alice", 10))
fun main() {
println(a.containsAllExact(b))
}
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
您可以为此添加一个扩展函数,例如:
fun List<Person>.containsAllExact(list2: List<Person>): Boolean {
val occurences1 = this.groupingBy{ it }.eachCount()
val occurences2 = list2.groupingBy{ it }.eachCount()
return occurences2.all{
it.value <= occurences1.getOrDefault(it.key, 0)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1365 次 |
| 最近记录: |