📜  Scala 中的 Lambda 表达式

📅  最后修改于: 2022-05-13 01:55:38.051000             🧑  作者: Mango

Scala 中的 Lambda 表达式

Lambda 表达式是指使用匿名函数而不是变量或值的表达式。当我们在一个地方使用一个简单的函数时,Lambda 表达式会更方便。这些表达式比定义整个函数更快、更具表现力。我们可以使我们的 lambda 表达式可重用于任何类型的转换。它可以遍历对象集合并对它们执行某种转换。
语法

val lambda_exp = (variable:Type) => Transformation_Expression

示例

// lambda expression to find double of x
val ex = (x:Int) => x + x
使用 Lambda 表达式
  • 我们可以像普通函数调用一样将值传递给 lambda。
    例子 :
    // Scala program to show
    // working of lambda expression
      
    // Creating object
    object GfG
    {
          
    // Main method
    def main(args:Array[String])
    { 
        // lambda expression
        val ex1 = (x:Int) => x + 2
      
        // with multiple parameters
        val ex2 = (x:Int, y:Int) => x * y
          
        println(ex1(7))
        println(ex2(2, 3))
    }
    }
    

    输出:

    9
    6
  • 要将转换应用于任何集合,我们通常使用map()函数。它是一个高阶函数,我们可以将 lambda 作为参数传递,以便根据 lambda 表达式的定义转换集合中的每个元素。
    例子 :
    // Scala program to apply
    // transformation on collection
      
    // Creating object
    object GfG
    {
          
    // Main method
    def main(args:Array[String])
    {
        // list of numbers
        val l = List(1, 1, 2, 3, 5, 8)
      
        // squaring each element of the list
        val res = l.map( (x:Int) => x * x )
      
    /* OR
    val res = l.map( x=> x * x )
    */
        println(res)
    }
    }
    

    输出:

    List(1, 1, 4, 9, 25, 64)

    我们可以看到,定义的执行平方操作的匿名函数是不可重用的。

  • 我们将它作为参数传递。但是,我们可以使其可重用,并可以与不同的集合一起使用。
    例子 :
    // Scala program to apply
    // transformation on collection
      
    // Creating object
    object GfG
    {
        // Main method
        def main(args:Array[String])
        {
            // list of numbers
            val l1 = List(1, 1, 2, 3, 5, 8)
            val l2 = List(13, 21, 34)
          
            // reusable lambda
            val func = (x:Int) => x * x
      
            // squaring each element of the lists
            val res1 = l1.map( func )
            val res2 = l2.map( func )
          
            println(res1)
            println(res2)
        }
    }
    

    输出:

    List(1, 1, 4, 9, 25, 64)
    List(169, 441, 1156)
  • lambda 也可以用作函数的参数。
    例子 :
    // Scala program to pass lambda
    // as parameter to a function
      
    // Creating object
    object GfG
    {
      
        // transform function with integer x and 
        // function f as parameter
        // f accepts Int and returns Double
        def transform( x:Int, f:Int => Double) 
        =
        f(x)
      
        // Main method
        def main(args:Array[String])
        {
          
            // lambda is passed to f:Int => Double
            val res = transform(2, r => 3.14 * r * r)
      
            println(res)
    }
    }
    

    输出:

    12.56

    在上面的例子中,变换函数接受整数 x 和函数f,将变换应用于 f 定义的 x。在函数调用中作为参数传递的 Lambda 返回Double类型。因此,参数f必须服从 lambda 定义。

  • 我们也可以对任何集合执行相同的任务。在集合的情况下,我们需要对 transform函数进行的唯一更改是使用map函数将f定义的转换应用于列表l的每个元素。
    例子 :
    // Scala program to pass lambda
    // as parameter to a function
      
    // Creating object
    object GfG
    {
      
        // transform function with integer list l and 
        // function f as parameter
        // f accepts Int and returns Double
        def transform( l:List[Int], f:Int => Double) 
        =
        l.map(f)
      
        // Main method
        def main(args:Array[String])
        {
            // lambda is passed to f:Int => Double
            val res = transform(List(1, 2, 3), r => 3.14 * r * r)
            println(res)
        }
    }
    

    输出:

    List(3.14, 12.56, 28.259999999999998)