Scala comprehension表达式

for comprehension


for comprehension是一种用于创建新集合的for表达式

Scala提供了轻量级符号来表示序列理解(sequence comprehensions)。理解具有形式for (enumerators) yield e,此处的enumerators指的是分号间隔的枚举器列表。枚举器表示引入新变量的生成器,或过滤器。理解计算通过枚举器生成的每个绑定的主体e,并且返回这些值的序列。

case class User(name: String, age: Int)

val userBase = List(User("Travis", 28),
  User("Kelly", 33),
  User("Jennifer", 44),
  User("Dennis", 23))

val twentySomethings = for (user <- userBase if (user.age >=20 && user.age < 30))
  yield user.name 

note:伴随yield的for循环创建了List。
note:user <- userBase是生成器。
note: if(user.age >= 20 && user.age < 20)是护卫,将非20s的用户过滤。

def foo(n: Int, v: Int) =
   for (i <- 0 until n;
        j <- i until n if i + j == v)
   yield (i, j)

note:生成二元组,二元组内元素的值位于0到n-1之间,并且两元素和为v。

理解并不仅限于列表,每个支持withFilter、map与flatMap操作的数据类型都可以被用于序列理解。

可以忽略理解中的yield,在这种情况下,理解返回Unit。

忽略yield

def foo(n:Int, v:Int) =
    for (i <- 0 until n; j <- i until n if i + j == v)
    println(s"($i, $j)")

翻译源:Scala Tour

你可能感兴趣的:(大数据)