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

JavaSE核心知识点03高级特性03-04(Lambda表达式)

🤟致敬读者

  • 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉

📘博主相关

  • 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息

文章目录

    • JavaSE核心知识点03高级特性03-04(Lambda表达式)
      • 一、Lambda表达式简介
      • 二、Lambda表达式基础语法
        • 示例对比:Lambda vs 匿名内部类
      • 三、函数式接口(Functional Interface)
        • 自定义函数式接口:
      • 四、Lambda表达式使用场景
        • 1. 替代匿名内部类
        • 2. 集合操作与Stream API
        • 3. 作为方法参数
      • 五、Lambda表达式进阶特性
        • 1. 方法引用(Method Reference)
        • 2. 变量作用域
        • 3. 类型推断
      • 六、注意事项
      • 七、综合示例


📃文章前言

  • 🔷文章均为学习工作中整理的笔记。
  • 🔶如有错误请指正,共同学习进步。

在这里插入图片描述

JavaSE核心知识点03高级特性03-04(Lambda表达式)

让我们一步步深入了解Java中的Lambda表达式。

一、Lambda表达式简介

Lambda表达式是Java 8引入的一种简洁的匿名函数写法,主要用于简化函数式接口(仅含一个抽象方法的接口)的实现。它使得代码更简洁、易读,尤其在处理集合和并发任务时效果显著。


二、Lambda表达式基础语法

Lambda的基本结构如下:

(参数列表) -> { 方法体 }
  • 参数列表:与接口方法参数一致,类型可省略。
  • 箭头符号->:分隔参数和方法体。
  • 方法体:单行代码可省略{}return,多行则必须使用。
示例对比:Lambda vs 匿名内部类

匿名内部类

Runnable r = new Runnable() {@Overridepublic void run() {System.out.println("Hello World");}
};

Lambda表达式

Runnable r = () -> System.out.println("Hello World");

三、函数式接口(Functional Interface)

函数式接口是Lambda表达式的核心,Java内置了多种常用接口:

接口方法用途
Runnablevoid run()无参无返回值
Consumer<T>void accept(T)消费一个参数
Supplier<T>T get()提供返回值
Function<T,R>R apply(T)接收T类型,返回R类型
Predicate<T>boolean test(T)条件判断
自定义函数式接口:
@FunctionalInterface
interface Greeting {void sayHello(String name);
}// 使用Lambda
Greeting greet = name -> System.out.println("Hello, " + name);
greet.sayHello("Alice"); // 输出:Hello, Alice

四、Lambda表达式使用场景

1. 替代匿名内部类

简化事件监听、线程创建等代码:

// 传统方式
new Thread(new Runnable() {@Overridepublic void run() {System.out.println("Running!");}
}).start();// Lambda方式
new Thread(() -> System.out.println("Running!")).start();
2. 集合操作与Stream API

结合Stream处理集合,代码更简洁:

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");// 过滤并打印长度>3的名字
names.stream().filter(name -> name.length() > 3).forEach(System.out::println);
// 输出:Alice, Charlie
3. 作为方法参数

传递行为而非值:

public static void processList(List<Integer> list, Consumer<Integer> processor) {for (Integer num : list) {processor.accept(num);}
}// 调用
processList(Arrays.asList(1, 2, 3), num -> System.out.println(num * 2));
// 输出:2, 4, 6

五、Lambda表达式进阶特性

1. 方法引用(Method Reference)

进一步简化Lambda,四种形式:

  • 静态方法类名::方法名
  • 实例方法对象::方法名
  • 任意对象的实例方法类名::方法名
  • 构造方法类名::new

示例:

// Lambda写法
Consumer<String> c1 = s -> System.out.println(s);
// 方法引用
Consumer<String> c2 = System.out::println;List<String> names = Arrays.asList("Alice", "Bob");
names.forEach(System.out::println); // 输出每个元素
2. 变量作用域

Lambda可以访问final或等效final的局部变量:

int limit = 5; // 等效final
List<Integer> numbers = Arrays.asList(1, 2, 3, 6);
numbers.stream().filter(n -> n < limit) // 正确:limit不可修改.forEach(System.out::println);
3. 类型推断

编译器根据上下文推断参数类型:

// 完整写法
Function<String, Integer> f1 = (String s) -> s.length();
// 简化写法(省略类型)
Function<String, Integer> f2 = s -> s.length();

六、注意事项

  1. 仅用于函数式接口:Lambda只能替代单一抽象方法的接口。
  2. 省略规则
    • 单参数可省略()s -> s.length()
    • 单行代码可省略{}return(a, b) -> a + b
  3. this关键字:Lambda中的this指向外部类,而非Lambda自身。

七、综合示例

场景:使用Lambda和Stream对用户列表进行排序和过滤。

List<User> users = Arrays.asList(new User("Alice", 25),new User("Bob", 30),new User("Charlie", 20)
);// 按年龄排序,过滤年龄≥25,提取用户名
List<String> names = users.stream().sorted((u1, u2) -> u1.getAge() - u2.getAge()).filter(u -> u.getAge() >= 25).map(User::getName).collect(Collectors.toList());System.out.println(names); // 输出:[Alice, Bob]

通过以上内容,你应该能够掌握Lambda的基本用法和常见场景。建议多实践,尝试将现有的匿名类重构为Lambda,并熟悉Stream API的使用,以充分发挥Lambda的优势。



📜文末寄语

  • 🟠关注我,获取更多内容。
  • 🟡技术动态、实战教程、问题解决方案等内容持续更新中。
  • 🟢《全栈知识库》技术交流和分享社区,集结全栈各领域开发者,期待你的加入。
  • 🔵​加入开发者的《专属社群》,分享交流,技术之路不再孤独,一起变强。
  • 🟣点击下方名片获取更多内容🍭🍭🍭👇

相关文章:

  • 【RocketMQ 生产者和消费者】- 生产者启动源码 - MQClientInstance 定时任务(4)
  • 开盘啦 APP 抓包 逆向分析
  • 真实案例拆解:智能AI客服系统中的两类缓存协同
  • 高分辨率北半球多年冻土数据集(2000-2016)
  • 7.1查找的基本概念
  • 第307个VulnHub靶场演练攻略Corrosion: 2
  • 可编程运动控制器行业2025数据分析报告
  • SQL每日一题(5)
  • 模拟电子技术基础----绪论
  • 【刷题】质数因子
  • JDK21深度解密 Day 2:虚拟线程入门与基础应用
  • lc hot 100之:环形链表
  • Redis 常用命令
  • 005 深度优先搜索(DFS)算法详解:图解+代码+经典例题
  • Linux命令简介
  • ByteCTF2021 BabyDroid WP
  • RAM(随机存取存储器)的通俗解释及其在路由器中的作用
  • 推荐系统里真的存在“反馈循环”吗?
  • 前端表单中 `readOnly` 和 `disabled` 属性的区别
  • PHP SPL 自动加载机制详解与实战应用:spl_autoload_register 使用指南
  • 微网站开发系统/上海网站关键词排名
  • 石岩做网站哪家好/中国万网域名注册官网
  • 自己做的网站服务器开了进不去/怎么在百度制作自己的网站
  • wordpress 导入文章/如何做优化排名
  • 免费做头像网站有哪些/新闻头条最新消息今天发布
  • 制作网页时一般使用什么对网页进行布局/广州优化公司哪家好