功能基于Scala中的值创建列表

Say*_*ald 2 collections functional-programming scala

我有一个任务遍历一系列元组,并根据元组中的最后一个值创建一个案例类Item的1个或多个副本.我可以用foreach和Mutable List解决这个任务.当我学习FP和Scala集合时,它可以通过Scala中的不可变集合和高阶函数以更多功能方式完成吗?

例如,输入:

List[("A", 2), ("B", 3), ...]
Run Code Online (Sandbox Code Playgroud)

输出:

List[Item("A"), Item("A"), Item("B"),Item("B"),Item("B"), ...]
Run Code Online (Sandbox Code Playgroud)

Bri*_*ian 5

对于flatMap使用List.fill[A](n: Int)(elem: ? A)它产生一次List的每个元组elem n.

scala> val xs = List(("A", 2), ("B", 3), ("C", 4))
xs: List[(String, Int)] = List((A,2), (B,3), (C,4))

scala> case class Item(s: String)
defined class Item

scala> xs.flatMap(x => List.fill(x._2)(Item(x._1)))
res2: List[Item] = List(Item(A), Item(A), Item(B), Item(B), Item(B), Item(C), Item(C), Item(C), Item(C))
Run Code Online (Sandbox Code Playgroud)