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

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; // 如果取消注释会导致编译错误
http://www.lqws.cn/news/530263.html

相关文章:

  • CMake实践:安装与配置
  • 基于vue3+ByteMD快速搭建自己的Markdown文档编辑器
  • MySQL 中的锁机制详解:原理、实现方式与实战解析!
  • MySQL多表关系
  • Nordic 电源管理nPM1300 EK评估板介绍
  • 大模型在慢性病毒性肝炎预测及诊疗方案制定中的应用研究
  • 频宽是什么: 0.35/Tr、0.5/Tr?
  • 第七章---软件实现与编码
  • 关于 ARM64 汇编:调用流程与栈帧结构解析
  • 酒店智能门锁系统常见问题解决方法——东方仙盟
  • zookeeper总是重启失败
  • Golang是什么
  • AI代码编程工具:开启智能编程新时代
  • uniapp微信小程序:editor组件placeholder字体样式修改
  • Spring Boot 中使用 Jackson 实现全局时间格式处理(支持多格式反序列化)
  • A模块 系统与网络安全 第三门课 网络通信原理
  • Spring AI 入门到实战:我如何用它让系统具备“理解能力”
  • 【机器学习第一期(Python)】梯度提升决策树 GBDT
  • Pycharm无法运行Vue项目的解决办法
  • Java 泛型详解:从入门到实战
  • jdbc实现跨库分页查询demo
  • 人力资源管理系统
  • Spring Cloud Config动态刷新实战指南
  • 用户统计-01.需求分析和设计
  • GNSS位移监测站在大坝安全中的用处
  • 渗透实战:使用隐式转换覆盖toString的反射型xss
  • Day43 复习日 图像数据集——CNN
  • 【PX4-AutoPilot教程-TIPS】PX4系统命令行控制台ConsolesShells常用命令(持续更新)
  • ES文件管理器v4.4.3(ES文件浏览器)
  • 鸿蒙 FoldSplitContainer 解析:折叠屏布局适配与状态管理