将List分区为两个以上的分区

时间:2015-07-14 09:51:47

标签: scala scala-collections

我有一个清单:

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:字符串的每个列表。这种气味无功能。

有人能说明如何以功能性方式解决上述问题吗?

3 个答案:

答案 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))