Java中Lambda表达式(面向初学者)

news2024/9/22 3:38:42

目录

一、Lambda表达式是什么?什么场景下使用Lambda?

1.Lambda 表达式是什么

2.函数式接口是什么

 第二章、怎么用Lambda

1.必须有一个函数式接口

2.省略规则

3.Lambda经常用来和匿名内部类比较

   第三章、具体使用场景举例()

1.案例一,自己写一个表达式


一、Lambda表达式是什么?什么场景下使用Lambda?


1.Lambda 表达式是什么


1.Lambda 表达式本质上是一个匿名方法,是JAVA8中提供的一种新的特性(一种新的表达方式,以前旧的写法换成新的写法,可以写出更简洁、更灵活的代码)。

我们以前定义一个方法总是想到方法的五要素:

修饰符 返回值类型 方法名(参数列){方法体}

2.我要打印一段话,用Lambda翻新成一个匿名方法,语法格式如下:

以前写个方法:
public void prin(){
System.out.println(" 打印这个Lambda啊");
}

现在用Lambda写:
最简单的三要素:
参数列表   操作符箭头   方法体
  ()         ->    {System.out.println(" 打印这个Lambda啊");}

注意:直接把下面这段拿去运行是不行的,忍住先往下看:

() -> { System.out.println(" 打印这个Lambda啊");}

在这个基础上我们进行拓展丰富,在参数列表里放一个参数。

注意:这个也不能运行

有一个参数,并且无返回值;
参数列表里放个参数a       操作符箭头        方法体
    (参数a)              ->        System.out.println(a);

继续丰富,在参数列表里放两个参数,有返回值。

注意1:前面多了个Comparator com = 

注意2:可以复制运行了。因为这段代码前面多了一个Comparator com =,这Comparator是个接口,而且是函数式接口,那么函数式接口是什么。

//有两个以上的参数,有返回值,并且大括号方法体里头多条语句
Comparator com = (a, b) -> {
System.out.println("打印一下");  return Integer.compare(10, 11);
};

2.函数式接口是什么

接口好理解,那什么是函数式接口呢?函数式接口是有且仅有一个抽象方法(不包含object中的方法)的接口。注意:我们只需要关注抽象方法的个数,不用关注其他类型的方法个数。

如图:我们可以用注解@FunctionalInterface 检测是否为函数式接口

 
第二章、怎么用Lambda

1.必须有一个函数式接口

看了第一章我们知道,Lambda表达式前面放普通接口是不行的,必须是Comparator 这种函数式接口。如图Collection接口不是函数式接口,报错了:

 把Collection接口换成函数式接口Consumer 就可以复制运行了。

//Consumer 是函数式接口
Consumer con = (x) -> System. out .println(x);
        con.accept( "这个可以运行打印了" );

2.省略规则

       1. 参数类型必须同时省略

       2. 一个参数时,参数的括号可省略

       3. 代码块里只有一句时,可省略大括号,分号和return

Comparator com = (x, y) -> Integer.compare(10, 13);

3.Lambda经常用来和匿名内部类比较

但注意

1.Lambda表达式虽然简洁,用()->就可以代替整个匿名内部类,但只能用于函数式接口(有仅只有一个抽象方法的接口)。匿名内部类却可以用于接口,抽象类或者普通类。举个函数式接口Runnable接口的例子:


        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("这是匿名内部类里传了个Runnable的实现类对象");
            }
        }).start();
    

用Lambda写一下

//楞是把参数都省了
        new Thread(() -> System.out.println("好家伙这么简洁")).start();

   第三章、具体使用举例()
 

1.案例一,自己写一个表达式

1.自己写一个函数式接口注意只能有一个抽象方法

public interface Test {
//有且仅有一个抽象方法
    public String Test1(String test_str);
}

2.Lambda表达式

   Test test =(str)->{ System.out.println(str); return str;};
        String str=test.test1("打印一下1");
        System.out.println(str);
   }

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

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

相关文章

水果店(库)管理系统 —— 实现了管理员模式与顾客模式 JAVA

水果店(库)管理系统 1.前言:2.功能简介及部分测试视频:3.本管理系统的构建原理(简介):(1).如何跳转页面:(2).如何让控制台能输出彩色字体:(3).如何稳定存储数据:(4).如何…

误操作清空了回收站文件如何找到文件

我们在删除文件的时候,文件都是先跑到回收站里的,这样的防止我们出现误删的情况,但往往也会出现我们要恢复删除的文件却误操作清空了回收站的情况,那么误操作清空了回收站如何找到呢,下面小编给大家分享误操作清空了回…

window 10 安装node.js时遇到2502 2503错误(已解决)

node安装失败2503的解决办法:1、在WIN搜索框搜索powershell并右击;2、点击使用管理员身份运行powershell命令行工具;3、输入“msiexec /package node”;4、打开安装包,根据提示安装即可。 本文操作环境:Win…

9.Join的应用

1.reduceJoin的应用 案例:将两个表合并成一个新的表 需求分析:通过将关联条件作为Map输出的key(此处指pid),将两表满足Join条件的数据并携带数据所来源的文件信息,发往同一个ReduceTask,在Redu…

汇编小程序解析--3D立方体旋转

汇编小程序解析–3D立方体旋转,源代码如下,是vulture大神于1995年写的,我到现在才基本看懂。 ;本程序由国外的Vulture大哥编写,并公布了源码,这个是他95年的一个作品,可以说是在当时是非常成功的&#xff…

论shell之条件语句-if语句、case语句

目录 一:条件测试 1.文件测试 2.常见的测试操作符 3.整数值比较 ​4.字符串比较 ​5. 逻辑测试 二:if语句 1.单分支结构 2.单分支结构实例 3.双分支结构 4.双分支结构实例 5.多分支结构 6.多分支机构实例 7.嵌套if语句实例 三:case语…

2023企业服务的关键词:做强平台底座

作者 | 曾响铃 文 | 响铃说 4月下旬,软件行业相关的大会紧锣密鼓地开了好几场,不仅有政府主办的2023中国国际软件发展大会、中国软件创新发展大会,也有用友、浪潮等服务商举办的品牌活动,让软件业的话题一直保持热度。 以用友为…

十大排序算法简单总结与对比

假设排序均从小到大排序 排序算法工作原理平均时间复杂度最坏时间复杂度空间复杂度是否稳定排序冒泡排序把相邻元素两两比较,若左侧的元素大于右侧的元素,则交换,否则不交换。(每一轮最大的会跑到最右边)O(&#xff0…

VGA协议实践

文章目录 前言一、VGA接口定义与传输原理1、VGA接口定义2、传输原理3、不同分辨率对应不同参数 二、Verilog编程1、VGA显示彩色条纹2、VGA显示字符3、输出一幅彩色图像4、Quartus操作1、添加PLL核2、添加ROM核 三、全部代码四、总结五、参考资料 前言 VGA的全称是Video Graphi…

VBA最基础的趣味速成练习--VBA资料

很多朋友想学VBA,但是苦于无处入手,我特意花了几天时间,做了一个VBA速成练习表格 能让你快速上手VBA,感受到VBA的神奇之处,相信我们日常使用表格的朋友会非常喜欢它的, 下面是我们的表格界面,…

选择营销自动化软件时的3个常见错误

做出投资营销自动化软件的决定是一个重大决定,可能很难知道从哪里开始,尤其是当市场上有这么多选择时。选择正确的自动化软件可能是拥有良好的营销运营与拥有低效营销团队之间的区别。在这篇博文中,我们将讨论人们在选择营销自动化软件时最常…

Flink之TaskManager内存解析

一、CK失败 Flink任务的checkpoint操作失败大致分为两种情况,ck decline和ck expire: (1)ck decline 发生ck decline情况时,我们可以通过查看JobManager.log或TaskManager.log查明具体原因。其中有一种特殊情况为ck cancel&…

排序 - 选择排序(Selection sort)

文章目录 选择排序介绍选择排序实现选择排序的时间复杂度和稳定性选择排序时间复杂度选择排序稳定性 代码实现核心&总结 每日一道算法,提高脑力。第四天,选择排序。 选择排序介绍 它的基本思想是: 首先在未排序的数列中找到最小(or最大)元素&#…

Shiro详解(超全面)

目录: 一、简介二、Shiro的整体架构1、Subject2、Security Manager3、Cryptography4、Authenticator5、Authorizer6、realm7、sessionManager8、SessionDAO9、CacheManager 三、入门案例四、认证流程1、认证流程2、常见异常 五、授权流程1、授权流程2、自定义realm实现授权 六、…

JavaScript日期库之date-fn.js

用官网的话来说,date-fn.js 就是一个现代 JavaScript 日期实用程序库,date-fns 为在浏览器和 Node.js 中操作 JavaScript 日期提供了最全面、但最简单和一致的工具集。那实际用起来像它说的那么神奇呢,下面就一起来看看吧。 安装 安装的话就…

深度学习 -- pytorch 计算图与动态图机制 autograd与逻辑回归模型

前言 pytorch中的动态图机制是pytorch这门框架的优势所在,阅读本篇博客可以使我们对动态图机制以及静态图机制有更直观的理解,同时在博客的后半部分有关于逻辑回归的知识点,并且使用pytorch中张量以及张量的自动求导进行构建逻辑回归模型。 …

Springboot 自动装配流程分析

目录 1.基础知识: 2.具体代码执行流程 3.流程总结: 4.参考文章: 1.基础知识: springboot的自动装配是利用了spring IOC容器创建过程中的增强功能,即BeanFactoryPostProcessor, 其中的ConfigurationCla…

【JavaEE】SpringBoot的日志

目录 日志作用 SpringBoot日志框架 日志打印 日志级别 类型 作用 修改级别 日志永久化 配置日志文件目录 配置日志文件名 简化日志打印和永久化——lombok 日志作用 问题定位:可以帮助开发人员快速找到问题出现的位置系统监控:可以把系统的运…

你不知道的node.js小知识——使用nvm管理node版本及node与npm版本对应关系详解

一、下载和安装nvm管理包 (1)下载链接 https://github.com/coreybutler/nvm-windows/releases (我选的是nvm-setup.exe) (2)解压安装 (2次选择文件要安装的目录 第一次是nvm 第二次是node.js) (…

01.DolphinScheduler集群搭建

文章目录 关于Apache DolphinScheduler简介特性简单易用丰富的使用场景High ReliabilityHigh Scalability 软硬件环境建议配置1. Linux 操作系统版本要求2. 服务器建议配置生产环境 3. 网络要求4. 客户端 Web 浏览器要求 官网地址 单机部署(没啥用)前置准备工作启动 DolphinSch…