我最近開始研究 Scala 代碼,并試圖了解如何解決問題。
我有一個可變的物件串列,這些物件有一個id: Stringand values: List[Int]。我獲取資料的方式是,多個物件可以具有相同的 id。我正在嘗試合并串列中的專案,因此,例如,如果我有 3 個 id 為 123 的物件以及任何值,我最終只會得到一個具有 id 的物件,并且這 3 個物件的值相結合。
我可以用 java 的方式、迭代等等來做到這一點,但我想知道是否有更簡單的 Scala 特定的方式來解決這個問題?
uj5u.com熱心網友回復:
首先要做的是避免使用可變資料并考慮將一個不可變物件轉換為另一個。因此,與其改變一個集合的內容,不如考慮從舊集合創建一個新集合。
一旦你這樣做了,它實際上非常簡單,因為這是 Scala 庫直接支持的東西。
case class Data(id: String, values: List[Int])
val list: List[Data] = ???
val result: Map[String, List[Int]] =
list.groupMapReduce(_.id)(_.values)(_ _)
groupMapReduce通話分為三個部分:
第一部分按id欄位對資料進行分組并將其作為鍵。這給出了一個Map[String, List[Data]]
第二部分提取values欄位并生成資料,所以現在的結果是Map[String, List[List[Int]]]
第三部分將所有values欄位組合成一個串列,給出最終結果Map[String, List[Int]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/424402.html
