我对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))
?
提前致谢,
答案 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)
}