侧边栏壁纸
博主头像
colo

欲买桂花同载酒

  • 累计撰写 1823 篇文章
  • 累计收到 0 条评论

Java 8 中 Lambda 表达式的基本使用

2025-12-13 / 0 评论 / 4 阅读

题目

Java 8 中 Lambda 表达式的基本使用

信息

  • 类型:问答
  • 难度:⭐

考点

Lambda表达式,函数式接口,语法基础

快速回答

Lambda表达式是Java 8引入的匿名函数,用于简化函数式接口的实现。主要特点:

  • 使用箭头符号 -> 分隔参数和函数体
  • 可替代匿名内部类
  • 基本语法:(parameters) -> expression(parameters) -> { statements; }
  • 示例:Runnable r = () -> System.out.println("Hello Lambda");
## 解析

原理说明

Lambda表达式基于函数式接口(只有一个抽象方法的接口),编译器会自动推断类型。它实质上是实现了函数式接口的匿名类实例,但语法更简洁。

代码示例

// 传统匿名内部类
Runnable oldRunnable = new Runnable() {
    @Override
    public void run() {
        System.out.println("Old way");
    }
};

// Lambda表达式实现
Runnable lambdaRunnable = () -> System.out.println("Lambda way");

// 带参数的Lambda
Comparator<String> comparator = (s1, s2) -> s1.compareToIgnoreCase(s2);

// 多行代码块
Runnable multiLine = () -> {
    System.out.println("Line 1");
    System.out.println("Line 2");
};

最佳实践

  • 优先使用内置函数式接口(如 Runnable, Comparator, Consumer
  • 单行表达式可省略 {}return 关键字
  • 类型推断:当参数类型明确时可省略类型声明
  • 配合Stream API使用效果更佳

常见错误

  • 在非函数式接口上使用Lambda(接口有多个抽象方法)
  • 试图修改Lambda外部的非final局部变量
  • 混淆Lambda参数与实例变量命名
  • 错误示例:int x = 10; Runnable r = () -> x++; // 编译错误

扩展知识

  • 方法引用:进一步简化Lambda,如 System.out::println
  • 变量捕获:Lambda可访问final或等效final的局部变量
  • 函数式接口包java.util.function 提供 Predicate, Function 等常用接口
  • 与匿名类的区别:Lambda没有自己的作用域,this 指向外部类