JavaLambda表达式:使用和示例
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表达式可以提高代码的可读性和可维护性。
