Lambda 表达式

1. 概述

Lambda 表达式是 Java 8 引入的一个新特性,它提供了一种简洁的方式来表示匿名函数。Lambda 表达式可以被看作是函数式接口的实例,函数式接口是指只有一个抽象方法的接口。Lambda 表达式的引入使得 Java 在函数式编程方面更加强大和灵活。

2. 基本语法

Lambda 表达式的基本语法如下:

(parameters) -> expression

或

(parameters) -> { statements; }
  • parameters:参数列表,可以为空或包含一个或多个参数。
  • ->:箭头操作符,用于分隔参数和表达式/语句块。
  • expression:单个表达式,表达式的结果将作为 Lambda 表达式的返回值。
  • statements:语句块,可以包含多条语句,语句块必须用花括号 {} 包围。

3. 示例代码

3.1 无参数的 Lambda 表达式

// 定义一个函数式接口
interface MyFunction {
    void execute();
}

public class LambdaExample {
    public static void main(String[] args) {
        // 使用 Lambda 表达式实现 MyFunction 接口
        MyFunction myFunction = () -> System.out.println("Hello, Lambda!");
        myFunction.execute();  // 输出: Hello, Lambda!
    }
}

3.2 带参数的 Lambda 表达式

// 定义一个函数式接口
interface MathOperation {
    int operate(int a, int b);
}

public class LambdaExample {
    public static void main(String[] args) {
        // 使用 Lambda 表达式实现加法操作
        MathOperation addition = (a, b) -> a + b;
        System.out.println("10 + 5 = " + addition.operate(10, 5));  // 输出: 10 + 5 = 15

        // 使用 Lambda 表达式实现减法操作
        MathOperation subtraction = (a, b) -> a - b;
        System.out.println("10 - 5 = " + subtraction.operate(10, 5));  // 输出: 10 - 5 = 5
    }
}

3.3 带语句块的 Lambda 表达式

// 定义一个函数式接口
interface StringFunction {
    String execute(String str);
}

public class LambdaExample {
    public static void main(String[] args) {
        // 使用 Lambda 表达式实现字符串反转操作
        StringFunction reverse = (str) -> {
            String result = "";
            for (int i = str.length() - 1; i >= 0; i--) {
                result += str.charAt(i);
            }
            return result;
        };
        System.out.println("Reverse of 'Hello' is " + reverse.execute("Hello"));  // 输出: Reverse of 'Hello' is olleH
    }
}

4. 实践练习

4.1 练习 1:使用 Lambda 表达式实现排序

编写一个程序,使用 Lambda 表达式对一个整数列表进行排序。

import java.util.Arrays;
import java.util.List;

public class LambdaExercise {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(5, 3, 8, 1, 2);

        // 使用 Lambda 表达式对列表进行排序
        numbers.sort((a, b) -> a - b);

        System.out.println(numbers);  // 输出: [1, 2, 3, 5, 8]
    }
}

4.2 练习 2:使用 Lambda 表达式实现过滤

编写一个程序,使用 Lambda 表达式从一个字符串列表中过滤出长度大于 5 的字符串。

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class LambdaExercise {
    public static void main(String[] args) {
        List<String> words = Arrays.asList("apple", "banana", "cherry", "date", "elderberry");

        // 使用 Lambda 表达式过滤出长度大于 5 的字符串
        List<String> filteredWords = words.stream()
                                          .filter(word -> word.length() > 5)
                                          .collect(Collectors.toList());

        System.out.println(filteredWords);  // 输出: [banana, cherry, elderberry]
    }
}

5. 总结

Lambda 表达式是 Java 8 引入的一个重要特性,它使得代码更加简洁和易读。通过 Lambda 表达式,我们可以更方便地实现函数式接口,并在集合操作、排序、过滤等方面发挥重要作用。掌握 Lambda 表达式将为你的 Java 编程带来更多的灵活性和效率。

6. 进阶学习

在掌握了 Lambda 表达式的基础之后,你可以进一步学习以下内容:

  • Stream API:与 Lambda 表达式紧密结合,用于处理集合数据。
  • 函数式接口:了解 Java 8 中常用的函数式接口,如 Predicate、Consumer、Function 等。
  • 方法引用:学习如何使用方法引用来简化 Lambda 表达式的编写。

通过不断实践和学习,你将能够更加熟练地运用 Lambda 表达式,提升你的 Java 编程技能。