假設我有一些Info具有許多屬性的類,其中一個是categories: Option[List[String]. 我有一個這樣的串列Info objects,例如:val bigList = (Info1,Info2,Info3)。
我想bigList按每個元素的每個類別進行排序:
sortedList = List((category1,(Info1,Info2,Info3)),(category2,(Info4,Info4)),...)
等等。
我試過這樣使用groupBy:
val sortedList = bigList.groupBy(_.categories.getOrElse(""))
這不起作用,因為某些物件具有多個類別,因此它將共享某些類別的物件分組。
因此,是否可以在類別屬性中對每個類別進行分組?
uj5u.com熱心網友回復:
聽起來您想構建一個以類別為鍵的哈希映射,每個條目都Info包含包含該特定類別的所有物件。
您可以通過bigList為每個元素構造一個以類別作為第一個元素的元組來實作這一點。然后,您可以按該元素進行分組,為了使事情更清晰,遍歷值以洗掉類別(我們正在遍歷哈希映射值,因此我們在這里不需要類別,因為它已經存在于對應的哈希映射鍵)。
代碼:
case class Info(categories: Option[List[String]], id: String)
val info1 = Info(Some(List("A")), "1")
val info2 = Info(Some(List("A", "B")), "2")
val info3 = Info(Some(List("B", "C")), "3")
val bigList = List(info1, info2, info3)
def getCategories(info: Info): List[(String, Info)] =
info.categories.getOrElse(List()).map(_-> info)
val result: Map[String, List[Info]] = bigList
.flatMap(getCategories)
.groupBy(_._1)
.view.mapValues(_.map(_._2))
.toMap
// HashMap(
// A -> List(Info(Some(List(A)),1), Info(Some(List(A, B)),2)),
// B -> List(Info(Some(List(A, B)),2), Info(Some(List(B, C)),3)),
// C -> List(Info(Some(List(B, C)),3))
// )
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/327824.html
標籤:斯卡拉
上一篇:獲取Akkaask的目標/接收者
