欢迎访问宙启技术站
智能推送

Java中的Lambda函数基本语法

发布时间:2023-06-17 15:19:22

Java中的Lambda函数是Java8中引入的一种新特性,Lambda函数可以匿名定义函数,并且可以作为某些方法的参数或返回值使用。Lambda函数的基本语法为:

(parameter1, parameter2...) -> { function body }

其中,参数(parameter1, parameter2...)表示Lambda函数的参数列表,箭头 -> 表示翻译为“传入到”的意思。在箭头后面的花括号 {} 中,可以编写Lambda函数的逻辑实现,也可以返回不会有返回值的空内容。因此,如果一个Lambda函数没有任何参数,则可以省略参数列表这一部分,如下所示:

() -> { function body }

如果Lambda函数的参数只有一个,则可以省略参数列表的括号,如下所示:

parameter -> { function body }

对于函数体,如果只有单行语句,则可以省略花括号 {} 和 return 关键字,如下所示:

(parameter1, parameter2...) -> single statement

如果Lambda函数的类型可以推断出来,则可以省略参数的类型声明,如下所示:

(parameter1, parameter2...) -> { function body }

上面这些就是Lambda函数的基本语法。下面我们通过一个实例来了解如何使用Lambda函数。

假设我们有一个比较接近现实的场景:我们要对一个数组中的元素进行排序,并把排序结果输出。由于Java语言本身并不支持将方法作为参数传递,因此我们必须先定义某种接口类型,以便可以把接口类型的具体实现作为参数传递给排序方法。

在本例中,我们定义一个名为 Sortable 的接口,该接口具有一个比较两个元素大小的方法 compare()。我们还定义了两个数组 arr1 和 arr2,并分别为它们填充了一些元素。

接着,我们实现了两个不同的 compare() 方法,一个是升序排列,一个是降序排列。最后,我们调用 Java8 提供的 Arrays.sort() 方法,并将这两个方法作为参数传递给该方法。

代码如下所示:

~~~Java

import java.util.Arrays;

public class LambdaDemo {

public static void main(String[] args) {

// 定义数组

Integer[] arr1 = {27, 0, 3, 21, 9, 16, 15};

String[] arr2 = {"Java", "Python", "Ruby", "C++", "Lua", "Scala"};

// 升序排列并输出

Sortable<Integer> ascendingSort = (a, b) -> a - b;

Arrays.sort(arr1, ascendingSort);

System.out.println("升序排列的结果:" + Arrays.toString(arr1));

// 降序排列并输出

Sortable<Integer> descendingSort = (a, b) -> b - a;

Arrays.sort(arr1, descendingSort);

System.out.println("降序排列的结果:" + Arrays.toString(arr1));

// 按名称排序并输出

Sortable<String> nameSort = (a, b) -> a.compareTo(b);

Arrays.sort(arr2, nameSort);

System.out.println("按名称排列的结果:" + Arrays.toString(arr2));

}

}

interface Sortable<T> {

int compare(T a, T b);

}

~~~

运行该程序,我们会看到如下输出:

升序排列的结果:[0, 3, 9, 15, 16, 21, 27]
降序排列的结果:[27, 21, 16, 15, 9, 3, 0]
按名称排列的结果:[C++, Java, Lua, Python, Ruby, Scala]

Lambda 函数的一个优势是它可以轻松地实现接口中只有一个方法的匿名类。在上面的示例中,Sortable 接口只有一个比较元素大小的方法 compare()。我们可以使用 Lambda 函数来实现 compare() 方法,从而省略了传统的匿名类定义方法。Lambda 函数使代码更可读,更易于理解,省略了不必要的代码。