Scala的for表示式進階
for表示式強大而簡潔的表現力
Scala中For表示式的生成器、定義和過濾器
使用For表示式做查詢
使用For表示式實現map、flatMap、filter
點選(此處)摺疊或開啟
- case class Person(name: String, isMale: Boolean, children: Person*)
- object For_Expressive {
- def main(args: Array[String]) {
- val lauren = Person("Lauren", false)
- val rocky = Person("Rocky", true)
- val vivian = Person("Vivian", false, lauren, rocky)
- val persons = List(lauren, rocky, vivian)
-
- val result = persons filter (person => !person.isMale) flatMap(person =>
- (person.children map (child => (person.name, child.name))))
- println(result)
-
-
val forResult = for (person <- persons; if !person.isMale; child <- person.children) //scala實質上也會將for迴圈變為map的方式
- yield (person.name, child.name)
- println(forResult)
- }
-
}
Scala中For表示式的生成器、定義和過濾器
點選(此處)摺疊或開啟
- object ForInAction {
- def main(args: Array[String]) {
- val lauren = Person("Lauren", false)
- val rocky = Person("Rocky", true)
- val vivian = Person("Vivian", false, lauren, rocky)
- val persons = List(lauren, rocky, vivian)
-
-
val forResult = for {person <- persons; name = person.name; if !person.isMale; child <- person.children} //生成器、定義、過濾器
- yield (person.name, child.name)
- println(forResult)
-
-
val content =for(x <- List(1,2,3); y <- List("Hadoop","Spark","Flink")) yield(x,y) //兩個生成器
- println(content)
- }
-
}
使用For表示式做查詢
點選(此處)摺疊或開啟
- case class Book(title : String , authors : List[String])
- object For_Query {
- def main(args: Array[String]) {
- val books: List[Book] = List(
- Book("Structure and Interpretation ", List("Abelson , Harold", "Sussman")),
- Book("Principles of Compiler Design",
- List("Aho, Alfred", "Ullman, Jeffrey")),
- Book("Programming in Modula-2", List("Wirth, Niklaus")),
- Book("Introduction to Functional Programming", List("Bird, Richard")),
- Book("The Java Language Specification",
- List("Gosling, James", "Joy, Bill", "Steele, Guy", "Bracha, Gilad")))
-
- // val result = for(b <- books ; a <- b.authors if a startsWith "Gosling") yield b.title
- val result = for(b <- books if (b.title indexOf "Programming") >= 0 ) yield b.title
- println(result)
- }
-
}
使用For表示式實現map、flatMap、filter
點選(此處)摺疊或開啟
- object For_Advanced {
- def main(args: Array[String]) {}
- def map[A, B](list: List[A], f: A => B): List[B] =
- for(element <- list) yield f(element)
- def flatMap[A, B](list: List[A], f: A => List[B]): List[B] =
- for(x <- list; y <- f(x)) yield y
- def filter[A](list: List[A], f: A => Boolean): List[A] =
- for(elem <- list if f(elem)) yield elem
-
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28912557/viewspace-2088057/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 進階7 正規表示式
- Scala的高階函式函式
- JavaScript正規表示式進階指南JavaScript
- 聊聊JavaScript和Scala的表示式 ExpressionJavaScriptExpress
- Scala中的單例以及鏈式表示式單例
- ABAP mesh表示式, JavaScript和Scala的 expressionJavaScriptExpress
- C#進階之全面解析Lambda表示式C#
- 正規表示式系列之中級進階篇
- [.net 物件導向程式設計進階] (7) Lamda表示式(三) 表示式樹高階應用物件程式設計
- Scala隱式轉換理論及進階實踐-Coding技術進階實戰
- Python語法進階(2)- 正規表示式Python
- [.net 物件導向程式設計進階] (4) 正規表示式 (三) 表示式助手物件程式設計
- Lambda表示式之爭:Scala vs Java 8Java
- Java 8 vs. Scala(一): Lambda表示式Java
- Scala進階(1)—— 反射 object 和 class反射Object
- python進階(20) 正規表示式的超詳細使用Python
- Python 進階_生成器 & 生成器表示式Python
- Scala菜鳥進階之路一 基礎
- [.net 物件導向程式設計進階] (6) Lamda表示式(二) 表示式樹快速入門物件程式設計
- 【C進階】18、三目運算子和逗號表示式
- 函式的進階函式
- 【Scala篇】--Scala中的函式函式
- 32.企業級開發進階4:正規表示式
- Linux系統程式設計(17)——正規表示式進階Linux程式設計
- [.net 物件導向程式設計進階] (3) 正規表示式 (二) 高階應用物件程式設計
- Python函式的進階Python函式
- day 10 函式的進階函式
- Python 函式進階-高階函式Python函式
- Java中Lambda表示式的進化之路Java
- Java-進階篇【常用API、正規表示式、Lambda、演算法】---05JavaAPI演算法
- 前端進階-樣式前端
- [.net 物件導向程式設計進階] (5) Lamda表示式(一) 建立委託物件程式設計
- scala函式函式
- JavaScript進階之函式JavaScript函式
- [.net 物件導向程式設計進階] (2) 正規表示式 (一) 快速入門物件程式設計
- Scala 的方法與函式函式
- Spring AOP AspectJ 切面表示式高階用法Spring
- 利用Lambda表示式進行Java中的惰性求值Java