如何只Map列表中的某些元素而不使用过滤器?

30byixjq  于 2021-07-14  发布在  Java
关注(0)|答案(2)|浏览(353)

我有一个函数,它可以为任何输入返回字符串 black . 我想改变列表中每个不相等的元素 yellow 将其变黑并作为新列表返回。
使用filter和map从列表中删除我不想做的元素。
我还想保持它使用函数式编程,lambdas不是旧的for循环。我知道我可以在map函数中给出过滤条件,但我想避免这种情况

  1. def change_color(color:String):String = {
  2. return "black"
  3. }
  4. val cats = Seq("pink","blue","yellow")

所以输出应该是

  1. Seq("black","black","yellow")
piztneat

piztneat1#

这是Map函数在集合上的常见应用程序。在你的情况下,一份清单。Map的本质是什么:

  1. def change_color(color: String) : String =
  2. if (color == "yellow") "yellow" else "black"
  3. def map[A, B](list: List[A)(f: A => B): List[B] = {
  4. ???
  5. }

它接受一个从a到b的函数,并应用于集合的每个元素,因此,在您的例子中,您的函数是string=>string

  1. cats.map(change_color _)
  2. cats.map(el => change_color(el))

这只是使用scala集合及其函数的开始。从这里你可以尝试折叠,平面图,分组,并行处理等。。。

k5ifujac

k5ifujac2#

或者你可以用 Partial Function 要转换此序列

  1. Seq("pink", "blue", "yellow")
  2. .collect { case y @ "yellow" => y; case _ => "black" }

这样会更简洁。

相关问题