JAVA中的Lamda表达式

JAVA中的Lamda表达式

  • [Lambda 表达式的语法](#Lambda 表达式的语法)
  • 使用场景
  • 示例代码
      • 1.代替匿名内部类
      • [2. 带参数的 Lambda 表达式](#2. 带参数的 Lambda 表达式)
      • [3. 与集合框架结合使用](#3. 与集合框架结合使用)
      • [4. 使用 Stream 操作](#4. 使用 Stream 操作)
  • 总结

Java 的 Lambda 表达式是 Java 8 引入的一个新特性,用于简化代码,特别是在处理函数式编程时。Lambda 表达式提供了一种更简洁和灵活的方式来表示匿名函数(或称闭包)。

Lambda 表达式的语法

java 复制代码
  (parameters) -> expression
  或
  (parameters) -> { statements; }
  • parameters:参数列表,可以为空,也可以有一个或多个参数。
  • ->:箭头操作符,分隔参数列表和方法体。
  • expressionstatements:表示方法体,可以是单个表达式或多条语句(用大括号括起来)。

使用场景

Lambda 表达式主要用于简化接口实现,特别是函数式接口(即只有一个抽象方法的接口)。例如:

  • 替代匿名内部类
  • 配合集合框架的操作,如 stream、map、filter 等

示例代码

1.代替匿名内部类

传统写法:

java 复制代码
Runnable r1 = new Runnable() {
    @Override
    public void run() {
        System.out.println("Hello, world!");
    }
};
r1.run();

Lambda 表达式写法:

java 复制代码
Runnable r2 = () -> System.out.println("Hello, world!");
r2.run();

2. 带参数的 Lambda 表达式

传统写法:

java 复制代码
Comparator<Integer> comparator = new Comparator<Integer>() {
    @Override
    public int compare(Integer o1, Integer o2) {
        return o1 - o2;
    }
};

Lambda 表达式写法:

java 复制代码
Comparator<Integer> comparator = (o1, o2) -> o1 - o2;

3. 与集合框架结合使用

传统写法:

java 复制代码
List<String> list = Arrays.asList("a", "b", "c");
for (String s : list) {
    System.out.println(s);
}

Lambda 表达式写法:

java 复制代码
List<String> list = Arrays.asList("a", "b", "c");
list.forEach(s -> System.out.println(s));

4. 使用 Stream 操作

使用 Lambda 表达式和 Stream API 可以方便地进行集合的过滤、映射和聚合操作:

java 复制代码
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> evenNumbers = numbers.stream()
                                    .filter(n -> n % 2 == 0)
                                    .collect(Collectors.toList());
System.out.println(evenNumbers); // 输出:[2, 4]

总结

Lambda 表达式简化了匿名类的语法,尤其在配合函数式接口和 Java 8 的 Stream API 时显得特别强大。它的主要优点包括:

  1. 代码简洁:减少冗余代码。
  2. 可读性提高:表达逻辑更加清晰。
  3. 便于函数式编程:与 Java 8 的新特性(如 Stream)结合使用效果最佳。

注意:

  • Lambda 表达式只能用于函数式接口(只有一个抽象方法的接口)。
  • 使用时需要注意上下文和类型推导的正确性。
相关推荐
ht巷子16 小时前
Qt:QPainter坐标系统和坐标转换
开发语言·c++·qt
郝学胜-神的一滴16 小时前
雕栏玉砌:Qt 自定义窗口之美——标题、圆角、阴影三艺精解
开发语言·c++·qt·程序人生
fie888916 小时前
基于蒙特卡洛方法的粒子滤波跟踪MATLAB实现
开发语言·matlab
fensnote16 小时前
QT使用QtXlsxWriter读取excel文件
开发语言·qt·excel
BD_Marathon16 小时前
Spring——AOP工作流程
java·后端·spring
2501_9418779816 小时前
从调用链到因果关系的互联网工程语法重构与多语言实践随笔分享
开发语言·python
strive-debug16 小时前
cpp基础入门~~c语言的补足
开发语言·c++
予枫的编程笔记16 小时前
深度解析Apache RocketMQ:从核心原理到实战应用
java·apache·rocketmq
DeepFlow 零侵扰全栈可观测16 小时前
民生银行云原生业务的 eBPF 可观测性建设实践
运维·开发语言·分布式·云原生·金融·php
Miss_Chenzr16 小时前
Springboot基于批示的督查督办管理系统c6m0d(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
java·数据库·spring boot