如果我有一個immutableMap: Map<String, Int>
並想將其轉換爲mutableMap: MutableMap<String, Int>
,那麼最好的方法是什麼?似乎沒有任何方便的方法。將不可變映射文件複製到Kotlin中的可變映射文件中
8
A
回答
6
以下擴展功能的工作原理是將Map
複製到MutableMap
。
fun <K, V> Map<K, V>.toMutableMap(): MutableMap<K, V> {
return HashMap(this)
}
9
首先,在覆蓋前面的問題有關科特林只讀集合及其不變性,他們是真正的只讀生活意見可能可變集合的。
科特林可以安全地檢查可變性的類型,這些因爲有上,讓科特林知道接口標記,例如:
// assuming some variable readOnlyMap of type Map<String, String>
val mutableMap: MutableMap<String, String> = if (readOnlyMap is MutableMap<*,*>) {
readOnlyMap as MutableMap
} else {
HashMap(readOnlyMap)
}
這is
檢查內部調用TypeIntrinsics.isMutableMap
,是一個有效的辦法知道它是否可澆鑄。如果您先進行此項檢查,演員陣容中沒有危險。你會注意到編譯器非常高興,沒有警告。如果您不打算修改被視爲只讀的相同地圖,但顯示可以施展影響,則這可能很危險。
如果你不想修改原始地圖的機會,那麼當然總是通過用另一個地圖HashMap(readOnlyMap)
調用HashMap的構造函數來複制副本。或進行擴展功能:
fun <K, V> Map<K, V>.toMutableCopy() = HashMap(this)
,並稱之爲:
val mutableMap = readOnlyMap.toMutableCopy()
現在你有你的簡單方法。
參見:
相關問題
- 1. 可變的多重映射到不可變的映射
- 2. 將可執行文件中的變量映射到內存段
- 3. 將可變哈希映射轉換爲不可變哈希映射
- 4. Scala不可變映射協變
- 5. 斯卡拉 - 可變映射
- 6. 將文件映射到內存中
- 7. 在SBT中映射的文件不會複製到類目錄
- 8. 映射文件中的Hibernate'Inverse'
- 9. Scala中的不可變和可變映射
- 10. 在Java代碼中將Java映射轉換爲Scala不可變映射
- 11. 如何將內存映射到散列映射到文件
- 12. RestKit映射錯誤「無法將對象集合映射到不可變集合。」
- 13. 內存映射文件 - 映射結構而不是文件?
- 14. terraform可以使用可變散列或映射或映射在.tf文件中創建數據條目嗎?
- 15. 文件的可視化映射
- 16. 匿名映射或文件映射?
- 17. 高效的不可變映射實現?
- 18. 將QWidget映射到變量
- 19. 可以將映射映射爲0嗎?
- 20. 將數據庫結構映射到nHibernate映射文件
- 21. 使用構建器(使用immutables註釋處理器)將映射對象映射到不可變對象映射
- 22. 映射到目標文件
- 23. Hadoop - 文件到塊映射
- 24. 使用映射突變可變集合?
- 25. Maven映射文件
- 26. JPA映射文件
- 27. 映射xml文件
- 28. DNS文件映射
- 29. 映射MARC文件
- 30. 映射不可改變性冬眠
我認爲你應該明確指定HashMap的泛型,否則你最終會得到一個帶有平臺鍵/值類型的映射。 –
我建議不要'MutableMap'檢查,因爲它可以返回真正的Java集合,這些集合實際上並不可變。例如,嘗試'Collections.unmodifiableMap(mutableMapOf(「a」到「b」))是MutableMap <*,*>'。 –
這看起來對我來說是最好的答案。你可能會添加一個例子,它不直接使用HashMap(我相信'mutableMapOf'實際上使用'LinkedHashMap')。例如:'val mutableMap = map.entries.associateTo(mutableMapOf()){entry - > entry.toPair()}'。 – mfulton26