Java Lambda表达式

Java Lambda 表达式

Lambda 表达式是 Java 8 引入的一个重要特性,它提供了一种更简洁的方式来表示匿名函数(anonymous function),使得函数式编程在 Java 中变得更加容易。


1. 基本语法

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

(parameters) -> expression

(parameters) -> { statements; }

2. 主要特点

  1. 简洁性:比匿名内部类更简洁
  2. 函数式接口:Lambda 表达式需要与函数式接口(只有一个抽象方法的接口)配合使用
  3. 类型推断:Java 编译器可以推断参数类型

3. 示例

3.1 无参数

() -> System.out.println("Hello Lambda!")

3.2 单个参数

x -> x * x

3.3 多个参数

(int x, int y) -> x + y

3.4 带代码块

(String s) -> {
    System.out.println("Input: " + s);
    return s.length();
}

4. 常见用法

4.1 与函数式接口配合

// 定义函数式接口
interface Greeting {
    void sayHello(String name);
}

// 使用Lambda表达式
Greeting greet = name -> System.out.println("Hello, " + name);
greet.sayHello("Alice");

4.2 集合操作

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");

// 使用Lambda表达式遍历
names.forEach(name -> System.out.println(name));

// 使用方法引用
names.forEach(System.out::println);

4.3 线程创建

// 传统方式
new Thread(new Runnable() {
    public void run() {
        System.out.println("Running");
    }
}).start();

// Lambda方式
new Thread(() -> System.out.println("Running")).start();

5. 方法引用

Lambda 表达式的一种简写形式,有四种类型:

  1. 静态方法引用ClassName::staticMethod
  2. 实例方法引用instance::method
  3. 特定类型的任意对象的实例方法引用ClassName::method
  4. 构造方法引用ClassName::new

示例:

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");

// 等同于 name -> System.out.println(name)
names.forEach(System.out::println);

// 等同于 s -> s.length()
names.stream().map(String::length).forEach(System.out::println);

6. 变量作用域

Lambda 表达式可以访问:

  1. 局部变量(必须是 final 或 effectively final)
  2. 实例变量和静态变量
  3. 方法参数

示例:

int num = 10; // effectively final
Runnable r = () -> System.out.println(num); // 合法
// num = 20; // 如果取消注释会导致编译错误

你可能感兴趣的:(Java基础,java)