Scala:仅在列表的一个成员上运行函数

时间:2017-09-12 15:17:13

标签: scala list

我对Scala很新,我试图只在列表的一个成员上运行一个函数。这是一个看起来像

的列表

val list = List("hi", "bye now", "see ya later")

我想返回一个看起来像

的列表

val list = List("hi", "bye now", "see", "ya", "later")

我知道如果我跑list.map(_.split(" "))我会得到

list = ("hi", "bye", "now", "see", "ya", "later")。那么,如何使用lamdas而不是简单地执行

list.append(list(2).split(" "))list.remove(list(2))

提前致谢,

2 个答案:

答案 0 :(得分:1)

如果您打算仅将功能应用于列表中的特定条目,您可以:

list.zipWithIndex.flatMap {
  case (entry, idx) if (idx == 2) =>
    entry.split(" ")
  case (entry, idx) => List(entry)
}

这可以通过以下几点来概括:

// Add variance, curry, etc. as needed...
def flatMapOnly[A](list: List[A], offsets: Set[Int], f: A => Seq[A]): List[A] =
  list.zipWithIndex.flatMap {
    case (entry, idx) if (offsets.contains(idx)) =>
      f(entry)
    case (entry, _) => List(entry)
  }

scala> flatMapOnly(List("hi", "bye", "see ya later"), Set(1, 2), { str: String => str.split(" ").toList })
res39: List[String] = List(hi, bye, see, ya, later)

答案 1 :(得分:0)

 list.flatMap { 
   case x@"see ya later" => x.split(" ")
   case x => Seq(x)
 }