我有 2 個地圖定義為Map<String, Set<String>>:
map1 : {
Honda=[Accord, Civic, CRV],
Toyota=[Corola, RAV4, Yaris]
}
map2 : {
Accord=[5w30, 10w40],
Civic=[0w30, 5w30, 5w40],
CRV=[5w30, 5w40, 10w40],
Corola=[0w30, 10w40],
RAV4=[0w20, 0w30, 5w30]
}
我需要合并這 2 個地圖,因此結果地圖鍵將是品牌名稱(例如本田、豐田),值將是所有油。有些像這樣:
mergeMap: {
Honda=[0w30, 5w30, 5w40, 10w40],
Toyota=[0w20, 0w30, 5w30, 10w40]
}
我撰寫了使用塊的 sam old school 方法forEach,但我認為使用流等會更好。可能嗎?如果是,如何?
uj5u.com熱心網友回復:
由于生成的地圖將具有相同的鍵,因此您可以使用mapValues.
在 lambda 中,flatMap值中的每個字串都設定為第二個映射中的相應值(如果存在)。
map1.mapValues { (_, v) -> v.flatMap { map2[it] ?: emptyList() }.toSortedSet() }
這給了你一個Map<String, SortedSet<String>>.
請注意,這將按字典順序對“0w30”字串進行排序,因為它們是字串,因此您不會得到您想要的確切順序。我不知道這些字串代表什么,但您可能應該用實作的資料類Comparable來表示它們。那會給你正確的順序。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/451072.html
