使用分区方法拆分序列

时间:2016-06-07 20:11:30

标签: scala function object

我有一个序列说a就像

val a:Seq[Any]=Seq("Hai",1,2,"Hello")

现在我想将此序列拆分为2个不同的序列seqString,数据类型为StringseqInt的数据类型为Int

scala> val partitioned =a.partition(p => p.isInstanceOf[String])

这会将我的序列拆分为2个序列Seq("Hai", "Hello")Seq(1,2)。现在假设如果我尝试

,我想对我得到的序列进行操作
scala>partitioned._2.map(x => x+1)

我无法执行此操作,因为分区方法的结果返回Seq[Any]

2 个答案:

答案 0 :(得分:1)

如果您可以使用多次遍历,请使用collect语句试用case

scala> val a:Seq[Any]=Seq("Hai",1,2,"Hello")
a: Seq[Any] = List(Hai, 1, 2, Hello)

scala> val partitioned = (a.collect{case x: Int => x}, a.collect{case x: String => x})
partitioned: (Seq[Int], Seq[String]) = (List(1, 2),List(Hai, Hello))

scala> partitioned._1.map(_ * 2)
res1: Seq[Int] = List(2, 4)

答案 1 :(得分:0)

我想出了另一种方式。这可以使用foldLeft

完成
   a.foldLeft((Seq[String](),Seq[Int]()))((accum,b) =>
    b match{
    case i:Int => (accum._1,accum._2 :+i)
    case s:String => (accum._1 :+s,accum._2)
    case _ => accum
    })