Scala:将for表达式转换为高阶函数
我正在尝试Scala练习,其中for表达式转换为高阶函数-flatMap、filter和map。 我不明白映射的输入(List(author1,author2))是如何翻译成book.title的 输入:Scala:将for表达式转换为高阶函数,scala,Scala,我正在尝试Scala练习,其中for表达式转换为高阶函数-flatMap、filter和map。 我不明白映射的输入(List(author1,author2))是如何翻译成book.title的 输入: val books:List[Book] = List( Book(title = "kids watching", authors = List("Aavik","Arjun")) ) 表达方式: for{ book <- books name <-
val books:List[Book] = List(
Book(title = "kids watching", authors = List("Aavik","Arjun"))
)
表达方式:
for{
book <- books
name <- book.authors
if name.startsWith("Aavik")
} yield book.title
地图的输入是列表(“Aavik”),地图与书的关系如何?@Aavik请阅读文章
示例的脱胶版本如下所示:
case class Book(title: String, authors: List[String])
val books: List[Book] = List(
Book(title = "kids watching", authors = List("Aavik","Arjun"))
)
books.flatMap { (book: Book) =>
book.authors.withFilter { (name: String) =>
name.startsWith("Aavik")
}.map { _ =>
book.title
}
}
如您所见,map{{{u=>book.title}
的作用域与book
变量的作用域相同。您可以在中运行此示例
可以帮助调查Scala是如何翻译理解的。如果我没有弄错你的问题,在上面的示例中,即
for{
book <- books
name <- book.authors
if name.startsWith("Aavik")
} yield book.title
所以,正如你们所看到的,我们有一本书,它是平面图的输入,可以在里面的任何地方访问。因此,在地图中访问book.title没有问题,因为地图被封装在平面地图中
如果您想更清楚,请告诉我。您的平面图涵盖了所有内容。您的地图位于flatMap中,因此在其中的任何一点上,您都在处理一本书,您可以通过scala中的帮助书variableHi Ivan访问它。我想比较2个hdfs文件,并想使用我在google中看到的使用方法。我已经开发了代码,但不知道如何继续。我已经标记为scala,标题为scala-compare 2 hdfs文件。
for{
book <- books
name <- book.authors
if name.startsWith("Aavik")
} yield book.title
books.flatMap(((book) => book.authors.withFilter(((name) => name.startsWith("Aavik"))).map(((name) => book.title))))