【 java 8】Lambda 表达式

news2025/2/28 14:57:34

📋 个人简介

  • 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜
  • 📝 个人主页:馆主阿牛🔥
  • 🎉 支持我:点赞👍+收藏⭐️+留言📝
  • 📣 系列专栏:java 小白到高手的蜕变🍁
  • 💬格言:要成为光,因为有怕黑的人!🔥
    请添加图片描述

目录

    • 📋 个人简介
  • 前言
    • 为什么使用 Lambda 表达式
    • Lambda 表达式举例
    • Lambda 表达式语法的使用
      • 语法格式一:无参,无返回值
      • 语法格式二:有一个参数,无返回值
      • 语法格式三:数据类型可以省略(类型推断)
      • 语法格式四:Lambda若只有一个参数,参数的小括号可以省略
      • 语法格式五:Lambda需要两个或者两个以上的参数,多条执行语句,并且可以有返回值
      • 语法格式六:当Lambda体只有一条语句时,return与大括号若有,都可以省略
    • Lambda 表达式的本质
  • 结语

前言

行文至此,java基础系列的文章更新的已经差不多了,现在开始会总结一些java8的新特性,然后向java web和框架方向靠近,并不断完善基础知识!

为什么使用 Lambda 表达式

Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使 Java 的语言表达能力得到了提升。

Lambda 表达式举例

public class Demo {
    public static void main(String[] args) {
        // 定制排序
        Comparator<Integer> integerComparator = new Comparator<Integer>(){
            @Override
            public int compare(Integer o1, Integer o2) {
                return Integer.compare(o1,o2);
            }
        };

        int compare1 = integerComparator.compare(12,21);
        System.out.println(compare1);

        // 定制排序的Lambda表达式写法
        Comparator<Integer> com = (o1,o2) -> Integer.compare(o1,o2);
        int compare2 = com.compare(12,21);
        System.out.println(compare2);

    }
}

可以看到,定制排序转换为Lambda表达式后写法非常简单,只需一行代码,那么接下来我们就来学习一下Lambda的语法规则,即怎么样写Lambda表达式!

Lambda 表达式语法的使用

(o1,o2) -> Integer.compare(o1,o2);

-> :Lambda操作符或者箭头操作符
-> 左边:Lambda形参列表(其实就是接口中抽象方法的形参列表)
-> 右边:Lambda体:(其实就是重写的抽象方法的方法体)

语法格式一:无参,无返回值

// 语法格式一:无参,无返回值
    // 正常写法
    Runnable r1 = new Runnable(){
        @Override
        public void run() {
            System.out.println("我是阿牛!");
        }
    };
    r1.run();

    // Lambda表达式写法
    Runnable r2 = () -> System.out.println("我是阿牛!");
    r2.run();

在这里插入图片描述

语法格式二:有一个参数,无返回值

// 语法格式二:有一个参数,无返回值
        // 正常写法
        Consumer<String> con = new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        };

        con.accept("你好!");

        // Lambda表达式写法
        Consumer<String> con1 = (String s) ->{ System.out.println(s); };
        con1.accept("你好呀!");

语法格式三:数据类型可以省略(类型推断)

在上面语法格式二的基础上

// 语法格式三:数据类型可以省略(类型推断)
        // 正常写法
        Consumer<String> con2 = new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        };

        con2.accept("你好!");

        // Lambda表达式写法   -   数据类型可以省略(类型推断)
        Consumer<String> con3 = (s) ->{ System.out.println(s); };
        con3.accept("你好呀!");

语法格式四:Lambda若只有一个参数,参数的小括号可以省略

在上面语法格式三的基础上

// 语法格式四:Lambda若只有一个参数,参数的小括号可以省略
        // 正常写法
        Consumer<String> con4 = new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        };

        con4.accept("你好!");

        // Lambda表达式写法   -   Lambda若只有个参数,参数的小括号可以省略
        Consumer<String> con5 = s ->{ System.out.println(s); };
        con5.accept("你好呀!");

语法格式五:Lambda需要两个或者两个以上的参数,多条执行语句,并且可以有返回值

// 语法格式五:Lambda需要两个或者两个以上的参数,多条执行语句,并且可以有返回值
        // 正常写法
        Comparator<Integer> com1 = new Comparator<Integer>(){
            @Override
            public int compare(Integer o1, Integer o2) {
                System.out.println(o1);
                System.out.println(o2);
                return Integer.compare(o1,o2);
            }
        };

        int compare1 = com1.compare(12,21);
        System.out.println(compare1);

        // Lambda表达式写法
        Comparator<Integer> com2 = (o1,o2) -> {
            System.out.println(o1);
            System.out.println(o2);
            return Integer.compare(o1,o2);
        };
        int compare2 = com2.compare(12,21);
        System.out.println(compare2);

语法格式六:当Lambda体只有一条语句时,return与大括号若有,都可以省略

// 语法格式六:当Lambda体只有一条语句时,return 与大括号若有,都可以省略
        // 正常写法
        Comparator<Integer> com1 = new Comparator<Integer>(){
            @Override
            public int compare(Integer o1, Integer o2) {
                return Integer.compare(o1,o2);
            }
        };
        int compare1 = com1.compare(12,21);
        System.out.println(compare1);

        // Lambda表达式写法  -  当Lambda体只有一条语句时,return 与大括号若有,都可以省略
        Comparator<Integer> com2 = (o1,o2) ->  Integer.compare(o1,o2);
        int compare2 = com2.compare(12,21);
        System.out.println(compare2);

Lambda 表达式的本质

Lambda表达式在java中与其它语言是不同的,Lambda在其它语言中是个函数,匿名函数,而在java中则作为接口的实例!

结语

如果你觉得博主写的还不错的话,可以关注一下当前专栏,博主会更完这个系列的哦!也欢迎订阅博主的其他好的专栏。

🏰系列专栏
👉软磨 css
👉硬泡 javascript
👉flask框架快速入门

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/361177.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL 性能优化思路和工具

MySQL 性能优化思路和工具 一、优化思路 作为架构师或者开发人员&#xff0c;说到数据库性能优化&#xff0c;你的思路是什么样的&#xff1f; 或者具体一点&#xff0c;如果在面试的时候遇到这个问题&#xff1a;你会从哪些维度来优化数据库&#xff0c;你会怎么回答&#x…

Hive内部表与外部表的区别具体说明

目录 1.在/opt/atguigu/目录下&#xff0c;新建两个txt文件 2.在hadoop的web端递归创建一个目录&#xff0c;存储这两个文件 3.查看web端的文件 一、内部表&#xff1a; 1.创建一个内部表&#xff0c;并指定内部表的存储位置 2.查看内部表&#xff0c;内部表中没有数据 …

技术学习-消息队列

什么是消息队列 可以简单理解为存放消息的队列&#xff0c;数据结构模型和队列一样&#xff0c;都是先进先出。主要用不同线程(Thread)/进程(Process) 为什么需要消息队列 (1)不同进程之间传递消息是&#xff0c;因为进程的耦合度高&#xff0c;改动一个进程&#xff0c;引发…

基于SVPWM改进的永磁同步电机直接转矩控制二更

导读&#xff1a;本期对基于SVPWM的永磁同步电机直接转矩控制进行全面的分析和仿真搭建。之后与传统的DTC进行比较&#xff0c;凸显基于SVPWM改进的DTC方法的有效性。如果需要文中的仿真模型&#xff0c;关注微信公众号&#xff1a;浅谈电机控制&#xff0c;留言获取。一、 传统…

Long型数据后端查询结果为null,返回前端显示-1,使用@JsonSerialize注解

使用场景 在开发中&#xff0c;我们将对象序列化为JSON传输给前端&#xff0c;有时候我们的某个或者某些字段需要特殊处理&#xff0c;比如我们有一个日期字段&#xff0c;我们希望当日期为NULL时给前端不返回NULL而返回为未完成等信息&#xff0c;或者我们有一些状态字段&…

达梦数据库(DM8)集成使用 Geoserver(2.22.2) 以及其他对应版本详解

达梦数据库&#xff08;DM8&#xff09;集成使用 Geoserver&#xff08;2.22.2&#xff09; 以及其他对应版本详解系统环境版本Geoserver 驱动对应版本达梦 8 集成 Geoserver 过程试错过程问题总结项目需要国产化&#xff0c;选择使用达梦数据库&#xff0c;在技术测试阶段&…

K-近邻算法(KNN)

K-近邻算法&#xff08;KNN&#xff09; K nearest neighbour 0、导引 如何进行电影分类 众所周知&#xff0c;电影可以按照题材分类&#xff0c;然而题材本身是如何定义的?由谁来判定某部电影属于哪 个题材?也就是说同一题材的电影具有哪些公共特征?这些都是在进行电影…

美创科技荣获“PostgreSQL中国最佳运维服务商”

近日&#xff0c;由中国开源软件推进联盟PostgreSQL分会&中科院软件所&CSDN联合举办主办的“中国PostgreSQL数据库生态大会”在北京中科院软件所隆重召开。美创科技受邀参加&#xff0c;三位顶级数据库技术专家亮相&#xff0c;分享美创科技在数据库内核技术、PostgreS…

IMX6ULL学习笔记(17)——工程管理

一、简介 之前我们把所有源码文件放在一个文件夹下。 这样做存在两个主要问题&#xff0c;第一&#xff0c;代码存放混乱不易阅读。第二&#xff0c;程序可移植性差。如果工程源文件达到几十、甚至数百个的时候&#xff0c;这样一股脑全部放到根目录下就会使工程显得混乱不堪。…

STM32开发(13)----获取唯一设备标识符UID

获取唯一设备标识符UID前言一、什么事UID二、实验过程1.CubeMx配置2.代码实现3.实验结果总结前言 这一章节介绍如何获取STM32芯片中的唯一的ID号的两种方法。 一、什么事UID 在许多项目中&#xff0c;识别设备是必要的。从简单的设备描述到更复杂的设备&#xff0c;如 USB 串…

Open3d入门

目录 点云数据 1 主成分分析 1.1 Method 1.2 Results 2 表面法线估计 2.1 Method 2.2 Results 3 体素网格下采样 3.1 Method 3.2 Results 点云数据 常用数据下载&#xff08;免积分&#xff09; 1 主成分分析 1.1 Method 对点云进行主成分分析&#xff08;PCA&…

[5/101] 101次面试之经典面试题

目录 01、什么是黑盒测试? 02、为什么要做黑盒测试? 03、你在软件生命周期中的哪些测试阶段用到过黑盒测试? 04、什么是白盒测试&#xff1f; 05、白盒测试与黑盒测试有什么区别&#xff1f; 06、为什么要对程序进行单元测试&#xff1f; 07、由谁来做单元测试&#…

RK3566添加湿度传感器以及浅析hal层

RK3566添加一款温湿度传感器gxht3x.挂在i2c总线下。驱动部分就不多做解析。大致流程硬件接好i2c线以及vcc gnd。后看数据手册。初始化寄存器&#xff0c;然后要读数据的话读那个寄存器&#xff0c;读出来的数据要做一个转化,然后实现open read write ioctl函数就行了。本文主要…

【LeetCode】剑指 Offer 10- Ⅲ. 矩形覆盖 p79 -- Java Version

题目链接&#xff1a;无 1. 题目介绍&#xff08;10- Ⅲ. 矩形覆盖 &#xff09; 我们可以用2x1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2x1的小矩形无重叠地覆盖一个2xn的大矩形&#xff0c;总共有多少种方法&#xff1f; 【测试用例】&#xff1a; 示例 1&#xff…

[学习笔记]Rocket.Chat业务数据备份

Rocket.Chat 的业务数据主要存储于mongodb数据库的rocketchat库中&#xff0c;聊天中通过发送文件功能产生的文件储存于/app/uploads中&#xff08;文件方式设置为"FileSystem"&#xff09;&#xff0c;因此在对Rocket.Chat做数据移动或备份主要分为两步&#xff0c;…

JavaScript高级程序设计读书分享之4章——4.2执行上下文与作用域

JavaScript高级程序设计(第4版)读书分享笔记记录 适用于刚入门前端的同志 执行上下文 变量或函数的上下文决定 了它们可以访问哪些数据&#xff0c;以及它们的行为。在浏览器中&#xff0c;全局上下文就是我们常说的 window 对象&#xff08;第 12 章会详细介绍&#xff09;&am…

【技术分享】Web自动化之Selenium安装

Web 应用程序的验收测试常常涉及一些手工任务&#xff0c;例如打开一个浏览器&#xff0c;并执行一个测试用例中所描述的操作。但是手工执行的任务容易出现人为的错误&#xff0c;也比较费时间。因此&#xff0c;将这些任务自动化&#xff0c;就可以消除人为因素。Selenium 可以…

Js中blob、file、FormData、DataView、TypedArray

引言 最开始我们看网页时&#xff0c;对网页的需求不高&#xff0c;显示点文字&#xff0c;显示点图片就很满足了&#xff0c;所以对于浏览器而言其操作的数据其实并不多&#xff08;比如读取本地图片显示出来&#xff0c;或上传图片到服务器&#xff09;&#xff0c;那么浏览器…

网络安全之认识挖矿木马

一、什么是挖矿木马&#xff1f; 比特币是以区块链技术为基础的虚拟加密货币&#xff0c;比特币具有匿名性和难以追踪的特点&#xff0c;经过十余年的发展&#xff0c;已成为网络黑产最爱使用的交易媒介。大多数勒索病毒在加密受害者数据后&#xff0c;会勒索代价高昂的比特币…

GEE学习笔记 六十三:新的地图图层ui.Map.CloudStorageLayer

在GEE中导出数据有一种方式是直接导出地图到Google Cloud Storage中&#xff0c;也就是Export.map.toCloudStorage(xxx)&#xff0c;这种方式是将我们计算生成影像导出成为静态瓦片的格式存放在Google Cloud Storage中。我们可以在其他的前端程序比如OpenLayer、Mapbox GL JS等…