将列表List [String,String]转换为Scala中的List [String,List [String]]?

CW *_* II 3 functional-programming scala

我想列出一个列表RawDoc,每个列表都有一个title和一个version,并将其转换为一个列表,Doc其中每个都有一个title和所有versions收集到列表中的所有列表:

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")
)
Run Code Online (Sandbox Code Playgroud)

我想从上面开始,rawDocs并创建docs如下:

val docs:List[Doc] = List(
  Doc("Green Book", List("1.1", "1")),
  Doc("Blue Book",  List("1.0", "2"))
)
Run Code Online (Sandbox Code Playgroud)

如果不使用for循环,如何在Scala中完成?

Tom*_*icz 5

这应该工作:

val docs = rawDocs.
  groupBy(_.title).map{
    case(title, docsWithSameTitle) => 
      Doc(title, docsWithSameTitle.map(_.version))
  }
Run Code Online (Sandbox Code Playgroud)

如果之间的差别"Blue Book",并"Blue BooK"没有附带错字,他们应该被视为等于:

val docs = rawDocs.
  groupBy(_.title.toUpperCase).map{
    case(_, docsWithSameTitle) => 
      Doc(docsWithSameTitle.head.title, docsWithSameTitle.map(_.version))
  }
Run Code Online (Sandbox Code Playgroud)