0

0

怎么理解Java中的lambda表达式

WBOY

WBOY

发布时间:2022-06-02 11:53:08

|

2313人浏览过

|

来源于CSDN

转载

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于lambda表达式的相关问题,lambda表达式是jdk8开始后的一种新语法形式,能够简化匿名内部类的代码写法,下面一起来看一下,希望对大家有帮助。

怎么理解Java中的lambda表达式

推荐学习:《java视频教程

Lambda概述

Lambda表达式是JDK8开始后的一种新语法形式

作用:简化匿名内部类的代码写法

立即学习Java免费学习笔记(深入)”;

格式: 

(匿名内部类被重写方法的形参列表)->{
    被重写方法的方法体代码
}
注:->是语法形式,无实际意义

首先我们先定义一个抽象类,通过匿名内部类重写其方法,再对其进行简化,比较二者之间有何变化:

使用Lambda表达式之前: 

WPS AI
WPS AI

金山办公发布的AI办公应用,提供智能文档写作、阅读理解和问答、智能人机交互的能力。

下载
public static void main (String[] args){
    People p = new People(){
    @Override
    public void run(){
        System.out.println("小学生跑的很慢");
        }
    };
    p.run();    

}
abstract class People{
    public abstract void run();
}

使用Lambda表达式之后:

People p = ()->{
    System.out.println("小学生跑的很慢");
};
//会出现报错

会出现报错,这是为什么呢?原因在于前面对于Lambda表达式的定义并不清晰,Lambda表达式并不能简化所有匿名内部类,其只能简化函数式接口匿名内部类的写法形式,且接口中有且仅有一个抽象方法,通常,我们会再接口上加上一个@Functionalinterface注解,标记该接口必须是满足函数式接口。

真正意义上通过Lambda表达式简化: 

@FunctionalInterface//加上这个注解必须是函数式接口,且只有一个抽象方法
interface People{
    void run();
}
//简化之前的匿名内部类
People p = new People(){
    @Override
    public void run(){
        System.out.println("小学生跑的很慢!");
    }
};
//简化之后
People p = () -> {
        System.out.println("小学生跑的很慢!");
};

另外,也可以将其作为参数代入方法中去使用:

//在原来的基础上定义一个pk方法
public static void pk(People p){
    System.out.println("跑步情况如何:")
    p.run();
}
//不使用Lambda的情况下:
pk(p);//需要在定义匿名内部类之后,将p代入;
//使用Lambda的情况:
People p = () -> {
        System.out.println("小学生跑的很慢!");
};
pk(() -> {
        System.out.println("小学生跑的很慢!");
});
//由于等号右边即是People创建的对象p,因此可以可以直接将其代入
Lambda的好处: Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码,它可以写出更简洁、更灵活的代码,作为一种更紧凑的代码风格,使Java语言表达能力得到了提升。

Lambda实战的作用 

在之前的学习过程中,我们学习过了Arrays的相关知识,其中有一个sort方法(可以将数组升序或降序排列),它其实也是接口类,并且只有一个抽象方法:

//精简之前:
Arrays.sort(grade,new Comparator(){
    @Override
    public int compare(Integer o1,Integer o2){
        return o2 -o1;
}
});
//精简之后:
Arrays.sort(grade,(Integer o1,Integer o2) -> {
        return o2 -o1;
});

Lambda表达式省略规则 

  • 参数类型可以省略不写
//参考前面的实战例子
Arrays.sort(grade,(Integer o1,Integer o2) -> {
        return o2 -o1;
});
//省略参数类型之后
Arrays.sort(grade,( o1, o2){
        return o2 -o1;
});
  • 如果只有一个参数,参数类型可以省略,同时()也可以省略
//简单引用一个单个参数的例子,不需要了解其具体含义
btn.addActionListener((ActionEvent e) -> {
    System.out.println("我是简单的例子。");
});
//简化之后:
btn.addActionListener( e -> {
    System.out.println("我是简单的例子。");
});
  • 如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写,同时要省略分号
//参照上一条规则的例子
btn.addActionListener( e -> {
    System.out.println("我是简单的例子。");
});
//简化之后:
btn.addActionListener( e -> System.out.println("我是简单的例子。") );
  • 如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写。此时,如果这行代码是return语句,必须省略return不写,同时也必须省略";"不写
//参照第一条规则的代码
Arrays.sort(grade,(Integer o1,Integer o2) -> {
        return o2 -o1;
});
//简化之后:
Arrays.sort(grade,( o1, o2)-> o2 -o1);

推荐学习:《java视频教程

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

7

2026.01.30

c++ 字符串格式化
c++ 字符串格式化

本专题整合了c++字符串格式化用法、输出技巧、实践等等内容,阅读专题下面的文章了解更多详细内容。

7

2026.01.30

java 字符串格式化
java 字符串格式化

本专题整合了java如何进行字符串格式化相关教程、使用解析、方法详解等等内容。阅读专题下面的文章了解更多详细教程。

1

2026.01.30

python 字符串格式化
python 字符串格式化

本专题整合了python字符串格式化教程、实践、方法、进阶等等相关内容,阅读专题下面的文章了解更多详细操作。

1

2026.01.30

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

20

2026.01.29

java配置环境变量教程合集
java配置环境变量教程合集

本专题整合了java配置环境变量设置、步骤、安装jdk、避免冲突等等相关内容,阅读专题下面的文章了解更多详细操作。

16

2026.01.29

java成品学习网站推荐大全
java成品学习网站推荐大全

本专题整合了java成品网站、在线成品网站源码、源码入口等等相关内容,阅读专题下面的文章了解更多详细推荐内容。

18

2026.01.29

Java字符串处理使用教程合集
Java字符串处理使用教程合集

本专题整合了Java字符串截取、处理、使用、实战等等教程内容,阅读专题下面的文章了解详细操作教程。

3

2026.01.29

Java空对象相关教程合集
Java空对象相关教程合集

本专题整合了Java空对象相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 3万人学习

C# 教程
C# 教程

共94课时 | 8万人学习

Java 教程
Java 教程

共578课时 | 53.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号