我有一个数据类:
data class UniqueProtein(var id: String, var spc: Int, var r: DoubleArray)
我已创建了一个{I},我想将其转换为HashSet,因此我可以找到两个HashMaps之间的重叠值,如下所示:
HashMap<UniqueProtein, UniqueProtein>
IntelliJ在keySet()调用下抛出以下内联错误:
dottest(control: HashMap<UniqueProtein, UniqueProtein>, treatment: HashMap<UniqueProtein, UniqueProtein>)
var combineddata:HashSet<UniqueProtein> = control.keySet().retainAll(treatment.keySet())
但由于我已将该对象声明为数据类,因此我不确定发生了什么......
答案 0 :(得分:3)
如果您正在寻找两张地图中的公用密钥,则只需intersect
他们的密钥,就像这样:
val combinedData: Set<UniqueProtein> = control.keys.intersect(treatment.keys)
这将返回一个包含两个集合的公共元素的新集合。
如果你进入它的实现,你会发现它只是使用retainAll
(在它被调用的集合的副本上):
public infix fun <T> Iterable<T>.intersect(other: Iterable<T>): Set<T> {
val set = this.toMutableSet()
set.retainAll(other)
return set
}
答案 1 :(得分:2)
您可以通过keys
成员访问密钥集。
然后过滤属于第二张地图的键:
val combinedData = control.keys.filter { treatment.keys.contains(it) }.toSet()
按键过滤整个地图(取回条目而不仅仅是按键):
var filteredMapByKeys = control.filterKeys { treatment.keys.contains(it) }
根据键过滤值:
var filteredValuesByKeys = control.filterKeys { treatment.keys.contains(it) }.values.toSet()