Java中的Lambda表达式是什么?

  • Post category:Java

Lambda表达式是Java 8中新增的一种语法结构,可以简化代码的编写。它的本质是一个函数式接口的实现,也可以理解为匿名函数。

Lambda表达式由三个部分组成:参数列表、箭头符号和方法体。其语法如下:

(parameter) -> {expression}

其中,parameter是指方法的参数列表;expression是指方法体。

考虑一个实际场景:在一个集合中找出所有年龄大于18岁的人。在Java 8之前,我们需要通过循环去遍历集合,判断每个元素是否满足条件,再进行处理。如下所示:

List<Person> people = /*initialize the list*/;
List<Person> adults = new ArrayList<Person>();
for (Person p : people) {
    if (p.getAge() > 18) {
        adults.add(p);
    }
}

使用Lambda表达式,可以将上述代码简化为:

List<Person> adults = people.stream().filter(p -> p.getAge() > 18).collect(Collectors.toList());

在Lambda中,我们使用了Stream接口提供的filter方法,传入一个Lambda表达式作为参数,表示过滤出年龄大于18岁的Person对象。最后,使用collect方法将结果封装为一个List返回。

再考虑一个例子:计算一个集合中所有元素的平方和。在Java 8之前,我们需要手动循环遍历集合,进行平方运算,最后累加得到结果。如下所示:

List<Integer> numbers = /*initialize the list*/;
int sum = 0;
for (int x : numbers) {
    sum += x * x;
}

使用Lambda表达式,可以将上述代码简化为:

List<Integer> numbers = /*initialize the list*/;
int sum = numbers.stream().map(x -> x * x).reduce(0, Integer::sum);

在Lambda中,我们使用了Stream接口提供的map方法,传入一个Lambda表达式作为参数,表示将集合中的每个元素进行平方运算。接着,使用reduce方法对集合中所有元素进行累加操作。其中,第一个参数0表示初始值,第二个参数Integer::sum表示对集合中的元素进行求和操作。

总的来说,在Java中Lambda表达式的出现,大大简化了代码的编写,提升了代码书写的效率和可读性。