我有一个数据类:

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
}

10-06 15:32