我有一个数据类:
data class UniqueProtein(var id: String, var spc: Int, var r: DoubleArray)
我创建了一个
HashMap<UniqueProtein, UniqueProtein>
,我想将其转换为HashSet,以便可以在两个HashMap之间找到重叠的值,如下所示:dottest(control: HashMap<UniqueProtein, UniqueProtein>, treatment: HashMap<UniqueProtein, UniqueProtein>)
var combineddata:HashSet<UniqueProtein> = control.keySet().retainAll(treatment.keySet())
IntelliJ在两个keySet()调用下均引发以下嵌入式错误:
is public /*package*/ in 'HashMap'
但是由于我已经将该对象声明为数据类,所以我不确定发生了什么...
最佳答案
如果要在两个 map 中查找公用密钥,则可以 intersect
它们的密钥,如下所示:
val combinedData: Set<UniqueProtein> = control.keys.intersect(treatment.keys)
这将返回一个包含两个集合的公共(public)元素的新集合。
而且,如果您跳入其实现,您将看到它仅使用
retainAll
(在它调用的集合的副本上):public infix fun <T> Iterable<T>.intersect(other: Iterable<T>): Set<T> {
val set = this.toMutableSet()
set.retainAll(other)
return set
}