当前位置: 首页 > news >正文

Lambda表达式使用介绍

Java 8 引入了 Lambda 表达式,这是一种简洁的语法,用于表示匿名函数。Lambda 表达式使得代码更加简洁、易读,并且支持函数式编程风格。以下是 Java 8 Lambda 表达式的详细说明和示例:


1. Lambda 表达式的基本语法

Lambda 表达式的语法如下:

(parameters) -> expression

(parameters) -> { statements; }
  • parameters:参数列表,可以为空或包含多个参数。
  • ->:Lambda 操作符,将参数和表达式或语句分开。
  • expression:单个表达式,Lambda 的返回值。
  • { statements; }:代码块,可以包含多条语句。

2. Lambda 表达式的特点

  1. 简洁性
    • 替代匿名内部类,减少模板代码。
  2. 类型推断
    • 编译器可以根据上下文推断参数类型。
  3. 函数式接口
    • Lambda 表达式需要与函数式接口(只有一个抽象方法的接口)配合使用。

3. 函数式接口

Lambda 表达式需要与 函数式接口 配合使用。函数式接口是只有一个抽象方法的接口。Java 8 提供了许多内置的函数式接口,如 RunnableComparatorConsumerSupplierFunctionPredicate 等。

示例:自定义函数式接口

@FunctionalInterface
public interface MyFunctionalInterface {
    void doSomething(String message);
}

4. Lambda 表达式的使用场景

(1) 替代匿名内部类

// 使用匿名内部类
Runnable runnable1 = new Runnable() {
    @Override
    public void run() {
        System.out.println("Hello, World!");
    }
};

// 使用 Lambda 表达式
Runnable runnable2 = () -> System.out.println("Hello, World!");

(2) 集合操作

List<String> list = Arrays.asList("Apple", "Banana", "Cherry");

// 使用 Lambda 表达式遍历集合
list.forEach(item -> System.out.println(item));

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

(3) 排序

List<String> list = Arrays.asList("Apple", "Banana", "Cherry");

// 使用 Lambda 表达式排序
list.sort((s1, s2) -> s1.compareTo(s2));

// 使用方法引用
list.sort(String::compareTo);

(4) 过滤

List<String> list = Arrays.asList("Apple", "Banana", "Cherry");

// 使用 Lambda 表达式过滤
List<String> filteredList = list.stream()
                                .filter(item -> item.startsWith("A"))
                                .collect(Collectors.toList());

5. Lambda 表达式的参数

(1) 无参数

Runnable runnable = () -> System.out.println("No parameters");

(2) 单个参数

Consumer<String> consumer = (message) -> System.out.println(message);

(3) 多个参数

Comparator<Integer> comparator = (a, b) -> a.compareTo(b);

(4) 类型推断

// 编译器可以推断参数类型
Comparator<Integer> comparator = (a, b) -> a.compareTo(b);

6. Lambda 表达式的方法引用

方法引用是 Lambda 表达式的简化写法,用于直接引用已有的方法。

(1) 静态方法引用

Function<String, Integer> function = Integer::parseInt;

(2) 实例方法引用

Consumer<String> consumer = System.out::println;

(3) 对象方法引用

List<String> list = Arrays.asList("Apple", "Banana", "Cherry");
list.sort(String::compareTo);

(4) 构造方法引用

Supplier<List<String>> supplier = ArrayList::new;

7. Lambda 表达式的变量作用域

Lambda 表达式可以访问外部的局部变量,但这些变量必须是 final 或 effectively final(即不可变)。

示例

int num = 10;
Runnable runnable = () -> System.out.println(num); // num 必须是 final 或 effectively final

8. Lambda 表达式的示例

(1) 使用 Predicate 过滤集合

List<String> list = Arrays.asList("Apple", "Banana", "Cherry");
List<String> filteredList = list.stream()
                                .filter(item -> item.startsWith("A"))
                                .collect(Collectors.toList());

(2) 使用 Function 转换集合

List<String> list = Arrays.asList("Apple", "Banana", "Cherry");
List<Integer> lengths = list.stream()
                            .map(String::length)
                            .collect(Collectors.toList());

(3) 使用 Consumer 遍历集合

List<String> list = Arrays.asList("Apple", "Banana", "Cherry");
list.forEach(item -> System.out.println(item));

(4) 使用 Supplier 创建对象

Supplier<List<String>> supplier = ArrayList::new;
List<String> list = supplier.get();

9. 总结

  • Lambda 表达式是 Java 8 引入的一种简洁语法,用于表示匿名函数。
  • 需要与函数式接口配合使用。
  • 支持类型推断、方法引用和变量作用域。
  • 适用于集合操作、排序、过滤等场景。

相关文章:

  • 【Bootstrap5】Bootstrap5学习笔记
  • 数据库复习(第五版)- 第七章 数据库设计
  • 3.6c语言
  • 【算法系列】基数排序
  • 维度建模事实表技术基础解析(以电商场景为例)
  • 洛谷 P1480 A/B Problem(高精度详解)c++
  • 相机几何与标定:从三维世界到二维图像的映射
  • 【LeetCode101】对称二叉树
  • 逐梦DBA:MySQL的编码设置
  • PWM子系统芯片驱动源码pwm-tegra.c分析
  • leetcode15 三数之和
  • ruoyi框架接入kkFileView
  • 侯捷 C++ 课程学习笔记:深入理解C++内存管理与类对象构造全过程
  • 【极客时间】浏览器工作原理与实践-2 宏观视角下的浏览器 (6讲) - 2.6 渲染流程(下):HTML、CSS和JavaScript,是如何变成页面的?
  • 第005文-模拟入侵网站实现0元购
  • µCOS-III从入门到精通 第八章(时间片调度)
  • 点云 基于法线的双边滤波原理和过程
  • LeetCode hot 100—二叉树的最大深度
  • 能量石[算法题]
  • YOLOv12 项目部署指南! 含报错解决
  • 视频丨习近平在河南洛阳市考察调研
  • 专家:炎症性肠病发病率上升,需加强疾病早期诊断
  • 证监会副主席李明:近期将出台深化科创板、创业板改革政策措施
  • 倒计时1天:走进“中国荔乡”茂名,探寻农交文旅商融合发展新模式
  • 水果预包装带来的环境成本谁来分担?
  • 上海明天短暂恢复晴热最高32℃,一大波雨水在候场