我有一个数据类:
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 中的公共(public)键,您可以直接 intersect
他们的 key ,像这样:
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
}
关于java - HashMap<data class, data class> object.keySet() 函数抛出与公共(public)调用相关的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49934576/