将列表划分为两个以上的分区

Partitioning a List into more than two partitions

我有一个列表:

val list1 = List("male:Adam", "male:Peter", "female:Jane", "female:Sue", "female:Jo", "other:John")

我想创建两个列表,一个是女性名字,一个是男性名字。 即:

List("Adam", "Peter")
List("Jane", "Sue", "Jo")

我用

完成了这个
val result = list1.groupBy(_.startsWith("male"))

所以 result 有两个列表映射到 truefalse 但每个元素都是 "male:Adam" 等。但是我必须循环每个列表删除 male:female: 字符串。这闻起来没有功能。

谁能展示如何以实用的方式解决上述问题?

一样使用地图功能
result(true).map(_.split(":")(1))
val groups = list.map(_.split(":")).groupBy(_(0)).mapValues(_.map(_(1)))

val males = groups("male")
val females = groups("female")
val map = list1.map(s => s.split(":") match { 
  case Array(sex, name) => (sex, name) 
})
.groupBy { case (sex, name) => sex }
.mapValues(_.map{ case (sex, name) => name })

val male = map("male")
// List(Adam, Peter)
val female = map("female")
// List(Jane, Sue, Jo)