Scala-如何仅适用于列表中的某些元素而没有过滤器



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" }

这将更简洁。

最新更新