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

JavaLambda表达式:使用和示例

发布时间:2023-06-25 19:41:02

JavaLambda表达式是Java SE 8中引入的一个新特性,它是一种匿名函数,允许将函数作为参数传递给方法,也可以将函数作为返回值。其本质应用是将一个函数式接口的实例(我们将其称为lambda表达式)传递给方法,从而简化代码的编写和阅读。

Lambda表达式的语法

Lambda表达式的语法如下:

(parameters) -> expression

(parameters) -> {

    statements;

}

其中,parameters是lambda表达式的参数列表,expression或者statement是方法体。

乍一看,lambda表达式的语法看起来比较陌生,但仔细观察会发现,它其实很简单。在(parameters)中,我们可以指明一个或多个参数,但需要注意的是,如果参数个数为0,则可以省略(parameters)。箭头“->”可以看作“Go to”的意思,它将参数和方法体分隔开来。在表达式中,如果整个方法体只有一条语句,则可以使用表达式的形式来编写。如果方法体由多条语句组成,则需要使用花括号{}来包含所有语句。

Lambda表达式的使用

Lambda表达式的使用主要涉及到函数式接口,它是Java SE 8中的另一个新特性。函数式接口是一种只包含一个抽象方法的接口。例如:

public interface Function<T, R> {

    R apply(T t);

}

这个接口定义了一个apply方法,它的参数类型是T,返回值类型是R。接口中只包含一个抽象方法,我们称其为函数式方法。

函数式方法的作用是为lambda表达式提供一个目标类型。例如:

Function<String, Integer> length = (String s) -> s.length();

在这个例子中,我们声明了一个Function类型的变量length,该变量的作用是将一个字符串转换为它的长度。我们为该变量传递了一个lambda表达式,该表达式表示输入参数是一个字符串,返回值是字符串的长度。在这个例子中,lambda表达式的类型与Function的apply方法相匹配,因此我们可以将它分配给变量length。

Lambda表达式的示例

我们来看一个简单的例子,使用lambda表达式来对数组进行排序:

public static void main(String[] args) {

    String[] names = { "Peter", "John", "Mary", "Bob" };

    Arrays.sort(names, (String s1, String s2) -> s1.compareTo(s2));

    for (String name : names) {

        System.out.println(name);

    }

}

在这个例子中,我们使用了Java SE 8中提供的Arrays.sort方法来对字符串数组进行排序。在sort方法中,我们传递了一个Comparator对象,用来指定排序的顺序。在这个例子中,我们使用lambda表达式来实现Comparator接口,声明一个新的比较器。在lambda表达式中,我们简单地调用字符串的compareTo方法来比较字符串的大小。

Lambda表达式还可以用在Java集合框架中。例如:

List<String> list = Arrays.asList("Peter", "John", "Mary", "Bob");

List<String> result = list.stream()

    .filter(s -> s.startsWith("J"))

    .map(String::toUpperCase)

    .sorted()

    .collect(Collectors.toList());

在这个例子中,我们使用了Java SE 8提供的新功能——流(Stream)来做一些操作。我们首先将字符串列表转换为流,然后使用filter方法过滤出以字母J开头的元素。接着,使用map方法将每个元素转换成大写字母。然后我们使用sorted方法对所有元素进行排序。最后,我们使用collect方法将元素收集到一个新的列表中。

总结

Java Lambda表达式是Java SE 8中引入的一个新特性,它可以简化代码的编写和阅读。使用Java Lambda表达式可以提高代码的可读性和可维护性。