【发布时间】:2016-11-24 14:02:28
【问题描述】:
我有一个书单:
case class Book(name:String,authors:List[String])
val books:List[Book] = List(
Book(name="Code in Scala",authors=List("Viny","Vinay")),
Book(name="Dance in 30 days",authors=List("Namratha","Namitha")),
Book(name="Cook in 30 days",authors=List("Pavan")),
Book(name="Gym in 30 days",authors=List("Nisanth","Vinay"))
)
现在我想知道作者姓名以“Vin”开头的书籍。 我已经在 for 循环中实现了这个,如下所示:
for(b<-books ; a <- b.authors ; if a.startsWith("Vin")) yield b.name
但我无法用高阶函数来实现它。 我尝试如下:
books flatMap (b=> b.authors.withFilter(a=>a.startsWith("Vin")).map(x=>x))
这让我得到了作者的姓名,但我无法访问图书对象。我该如何解决这个问题? 这里的主要目标是将“for循环”转换/翻译成高阶函数(flatmap/filter/map)
【问题讨论】:
-
如果您从第二个代码示例中删除 name 属性,您将获得 book 对象。你能用高阶函数展示你的代码吗??
标签: scala list higher-order-functions