Scala中的Lambda表达

Scala Lambda表达式

lambda表达式是使用匿名函数而不是使用一个变量或值初始化其值的表达式。

当在lambda表达式中使用的函数不复杂且仅在一个地方使用时,该函数非常有用。

Lambda表达式比在Scala中声明和定义的常规函数更快,更富有表现力。

lambda表达式是可重复使用Scala的,即你可以使用lambda表达式通过迭代多次对数据结构的集合,对他们进行操作。通常,这是一个转换表达式,它更改输入参数的值并将更改后的值返回到代码的调用行。

语法:

    val lambda_expression = (variable : Type) => expression

范例1:

可以调用和使用Lambda表达式,就像Scala中的任何其他常规方法一样。

object MyClass {
   val square = (x:Int) => x*x
    
    def main(args: Array[String]) {
        var x = 43; 
        printf("的平方 " + x + " is " + square(x))
    }
}

输出结果

的平方 43 is 1849

范例2:

Lambda表达式也可以应用于集合或数据结构。若要应用于集合,则使用方法map()。map()是Scala中的一个高阶函数,我们可以使用lambda表达式转换集合的值。

object MyClass {
    def main(args: Array[String]) {
         val values = List(12, 87, 53, 95, 81)
         val square = values.map((x:Int) => x*x)
         println("列表是: " + values)
         printf("方格列表为: ")         println(square)
    }
}

输出结果

列表是: List(12, 87, 53, 95, 81)
方格列表为: List(144, 7569, 2809, 9025, 6561)

用同样的方法,程序员可以使用利用一个以上的集合lambda表达式map()方法

范例3:

object MyClass 
{ 
    def main(args:Array[String]) 
    { 
        val square1 = List(9,2,5,34,1) 
        val square2 = List(13,6,8 ) 
        
        val func = (a:Int) =>   4*a
        
        val res1 = square1.map( func ) 
        val res2 = square2.map( func ) 
        
        println("正方形的边:"+square1)
        println("该区域是: "+res1) 
        println("正方形的边:"+square2)
        println("该区域是: "+res2) 
    } 
}

输出结果

正方形的边:List(9, 2, 5, 34, 1)
该区域是: List(36, 8, 20, 136, 4)
正方形的边:List(13, 6, 8)
该区域是: List(52, 24, 32)

范例4:

Scala编程语言中的lambda表达式也可以用作该方法的参数。

object MyClass
{ 
    def area( x:Int, f:Int => Double) = f(x) 
    
    def main(args:Array[String]) 
    { 
        val square = area(53, r => r * r) 
        println("面积为 "+ square) 
    } 
}

输出结果

面积为 2809.0

范例5:

object MyClass
{ 
	def area( l:List[Int], f:Int => Double) = l.map(f) 

	def main(args:Array[String]) 
	{ 
		val square = area(List(12, 87, 45), s =>  s * s) 
		println("所有给定正方形的面积为 "+square) 
	} 
}

输出结果

所有给定正方形的面积为 List(144.0, 7569.0, 2025.0)