Mushroom Notes Mushroom Notes
🍄首页
  • JavaSE

    • 基础篇
    • 数据结构
    • IO流
    • Stream流
    • 函数式接口
    • JUC
    • 反射
    • 网络编程
    • 设计模式
  • JavaEE

    • Servlet
    • JDBC
    • 会话技术
    • 过滤器监听器
    • 三层架构
  • JDK

    • 总览
  • JVM

    • 总览
  • 常用mate
  • CSS
  • JavaScript
  • rds 数据库

    • MySQL
    • MySQL 进阶
    • MySQL 库表规范
  • nosql 数据库

    • Redis
    • Redis 进阶
    • Redis 底层
    • MongoDB
  • Spring生态

    • Spring
    • Spring MVC
    • Spring boot
    • Spring Validation
  • Spring Cloud生态

    • Spring Cloud
    • 服务治理
    • 远程调用
    • 网关路由
    • 服务保护
    • 分布式事务
    • 消息中间件
  • 数据库

    • Mybatis
    • Mybatis Plus
    • Elasticsearch
    • Redisson
  • 通信

    • Netty
📚技术
  • 方案专题
  • 算法专题
  • BUG专题
  • 安装专题
  • 网安专题
  • 面试专题
  • 常用网站
  • 后端常用
  • 前端常用
  • 分类
  • 标签
  • 归档

kinoko

一位兴趣使然的热心码农
🍄首页
  • JavaSE

    • 基础篇
    • 数据结构
    • IO流
    • Stream流
    • 函数式接口
    • JUC
    • 反射
    • 网络编程
    • 设计模式
  • JavaEE

    • Servlet
    • JDBC
    • 会话技术
    • 过滤器监听器
    • 三层架构
  • JDK

    • 总览
  • JVM

    • 总览
  • 常用mate
  • CSS
  • JavaScript
  • rds 数据库

    • MySQL
    • MySQL 进阶
    • MySQL 库表规范
  • nosql 数据库

    • Redis
    • Redis 进阶
    • Redis 底层
    • MongoDB
  • Spring生态

    • Spring
    • Spring MVC
    • Spring boot
    • Spring Validation
  • Spring Cloud生态

    • Spring Cloud
    • 服务治理
    • 远程调用
    • 网关路由
    • 服务保护
    • 分布式事务
    • 消息中间件
  • 数据库

    • Mybatis
    • Mybatis Plus
    • Elasticsearch
    • Redisson
  • 通信

    • Netty
📚技术
  • 方案专题
  • 算法专题
  • BUG专题
  • 安装专题
  • 网安专题
  • 面试专题
  • 常用网站
  • 后端常用
  • 前端常用
  • 分类
  • 标签
  • 归档
  • JavaSE

  • JavaEE

  • JDK版本特性

    • 总览
    • Java8

      • java 8 - Lambda表达式
        • 表达式语法
        • 示例
        • 优缺点
      • java 8 - CompletableFuture 类
    • Java 17

    • Java 21

  • JVM

  • Java
  • JDK版本特性
  • Java8
kinoko
2024-01-03
目录

java 8 - Lambda表达式

lambda表达式是java8最突出的特性。是用来简化一种特殊的匿名内部类的语法,当一个匿名内部类只有一个方法时,则可以使用lambda表达式。
什么是匿名内部类?

new 接口/类名(参数1, 参数2...){
    实现方法1(){}
    实现方法2(){}
    ......
};
1
2
3
4
5

# 表达式语法


//   参数 -> 方法体
parameter -> expression body
1
2

表达式特征

  1. 可省略的参数类型,无需声明参数类型,编译器会自动根据匿名方法传参对位识别类型
  2. 可省略的(),当匿名方法只有一个传参时则可省略
  3. 可省略的{},当匿名方法体内只有一行语句时则可省略
  4. 可省略的return,当匿名方法有返回值且方法体内只有一行语句则可省略,该特征需要与3一起使用

# 示例


public class StreamDemo {

    public static void main(String[] args) {

        // 完整写法
        doMethod(new MyInterface() {
            @Override
            public void method(String str) {
                System.out.println(str);
            }
        }, "匿名方法执行咯~");

        // 1.lambda表达式
        doMethod((str) -> {
            System.out.println(str);
        }, "lambda表达式执行咯~");

        // 2.省略()
        doMethod(str -> System.out.println(str), "lambda表达式执行咯~");

        // 3.省略{}
        doMethod((str) -> System.out.println(str), "lambda表达式执行咯~");
        
    }

    private static void doMethod(MyInterface myInterface, String str) {
        myInterface.method(str);
    }

    interface MyInterface {
        void method(String str);
    }

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

如果是有返回值的方法:

public class StreamDemo {

    public static void main(String[] args) {

        // 完整写法
        String str1 = doMethod(new MyInterface() {
            @Override
            public String method(String str) {
                return str;
            }
        }, "匿名方法执行咯~");

        // 1.lambda表达式
        String str2 = doMethod((str) -> {
            return str;
        }, "lambda表达式执行咯~");

        // 4.省略(){}return
        String str3 = doMethod(str -> str, "lambda表达式执行咯~");

    }

    private static String doMethod(MyInterface myInterface, String str) {
        return myInterface.method(str);
    }

    interface MyInterface {
        String method(String str);
    }

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

lambda表达式的常见使用

public class StreamDemo {

    public static void main(String[] args) {

        new Thread(() -> System.out.println("异步任务执行..."));

        Stream.of(1, 2, 3, 4).map(number -> number + 1)
                .forEach(number -> System.out.println(number));

    }

}
1
2
3
4
5
6
7
8
9
10
11
12

# 优缺点


优点: 毫无疑问的优雅,简洁
缺点: 优雅往往难以理解,可读性差,复杂的lambda表达式一眼望去确实让人难以下手,当然这跟程序员对lambda表达式的熟练度有关,有部分保守的程序员的确不太接纳这种写法,我个人是非常welcome的,嘻嘻

#java#jdk8#lambda
上次更新: 2024/01/11 17:06:16
总览
java 8 - CompletableFuture 类

← 总览 java 8 - CompletableFuture 类→

最近更新
01
JVM 底层
09-13
02
JVM 理论
09-13
03
JVM 应用
09-13
更多文章>
Theme by Vdoing | Copyright © 2022-2024 kinoko | MIT License | 粤ICP备2024165634号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式