Transform a list List[String, String] into List[String, List[String]] in Scala?
functional-programming, scala
Solution
This should work:
val docs = rawDocs.
groupBy(_.title).map{
case(title, docsWithSameTitle) =>
Doc(title, docsWithSameTitle.map(_.version))
}
And if the difference between `"Blue Book"` and `"Blue BooK"` is not incidental typo and they should be treated as equal:
val docs = rawDocs.
groupBy(_.title.toUpperCase).map{
case(_, docsWithSameTitle) =>
Doc(docsWithSameTitle.head.title, docsWithSameTitle.map(_.version))
}
Problem
I would like to take a list of `RawDoc` which each have a `title` and a single `version` and transform it into a list of `Doc` which each have a `title` and all its `versions` collected together into a list: ``` case class RawDoc(title:String, version:String) case class Doc(title:String, versions:List[String]) val rawDocs:List[RawDoc] = List( RawDoc("Green Book", "1.1"), RawDoc("Blue Book", "1.0"), RawDoc("Green Book", "1"), RawDoc("Blue Book", "2") ) ``` I would like to start with the above `rawDocs` and create `docs` like this: ``` val docs:List[Doc] = List( Doc("Green Book", List("1.1", "1")), Doc("Blue Book", List("1.0", "2")) ) ``` Without using for loops how could this be done in Scala?