我有一个清单:
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
有两个列表映射到true
和false
,但每个元素都是"male:Adam"
等。但是我必须循环通过删除male:
和female:
字符串的每个列表。这种气味无功能。
有人能说明如何以功能性方式解决上述问题吗?
答案 0 :(得分:4)
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)
答案 1 :(得分:2)
val groups = list.map(_.split(":")).groupBy(_(0)).mapValues(_.map(_(1)))
val males = groups("male")
val females = groups("female")
答案 2 :(得分:0)
使用地图功能,如
result(true).map(_.split(":")(1))