i具有函数,对于任何输入返回字符串black
。我想更改列表中的每个元素,该元素与yellow
不等于黑色并将其返回为新列表。
使用过滤器并映射它会从我不想执行的列表中删除元素。
我还想使用功能编程,lambdas并不旧的循环。我知道我可以在地图功能中提供过滤条件,但我想避免使用
def change_color(color:String):String = {
return "black"
}
val cats = Seq("pink","blue","yellow")
因此输出应为
Seq("black","black","yellow")
这是映射功能在集合上的常见应用。在您的情况下,列表。地图的本质是什么:
def change_color(color: String) : String =
if (color == "yellow") "yellow" else "black"
def map[A, B](list: List[A)(f: A => B): List[B] = {
???
}
它从A到B函数并应用于集合的每个元素,因此,在您的情况下,您的功能是字符串=> string
cats.map(change_color _)
cats.map(el => change_color(el))
这只是使用Scala收集及其功能的开始。从这里,您可以尝试折叠,flatmap,分组,并行处理等...
或者您可以使用Partial Function
转换此序列
Seq("pink", "blue", "yellow")
.collect { case y @ "yellow" => y; case _ => "black" }
这将更简洁。