Scala 扩展群比
我有一个对象集合,每个对象都有一个列表,让我们说:Scala 扩展群比,scala,scala-collections,Scala,Scala Collections,我有一个对象集合,每个对象都有一个列表,让我们说: case class Article(text: String, labels: List[String]) 我需要构造一个映射,这样每个键都对应于一个标签,它的关联值是具有此标签的文章列表 我希望下面的例子能让我的目标更加明确。我想转换下面的列表 List( Article("article1", List("label1", "label2")), Article("article2", List("label2", "label
case class Article(text: String, labels: List[String])
我需要构造一个映射,这样每个键都对应于一个标签,它的关联值是具有此标签的文章列表
我希望下面的例子能让我的目标更加明确。我想转换下面的列表
List(
Article("article1", List("label1", "label2")),
Article("article2", List("label2", "label3"))
)
进入映射[字符串,列表[文章]]
:
Map(
"label1" -> List(Article("article1", ...)),
"label2" -> List(Article("article1", ...), Article("article2", ...)),
"label3" -> List(Article("article2", ...))
)
是否有一种优雅的方式来执行此转换?(我的意思是使用收集方法,而不需要直接使用可变收集)这怎么样
val ls = List(
Article("article1", List("label1", "label2")),
Article("article2", List("label2", "label3"))
)
val m = ls
.flatMap{case a @ Article(t,ls) => ls.map(_ -> a)}
.groupBy(_._1)
.mapValues(_.map(_._2))
m.foreach(println)
// (label2,List(Article(article1,List(label1, label2)), Article(article2,List(label2, label3))))
// (label1,List(Article(article1,List(label1, label2))))
// (label3,List(Article(article2,List(label2, label3))))
谢谢,我已经完全忘记了平面地图。很好的解决方案!