Lambda表达式第三版

news/2024/4/30 3:08:30/文章来源:https://blog.csdn.net/m0_65152767/article/details/132641724

1、函数式编程思想概述

  • 在数学中,函数就是有输入量、输出量的一套计算方案,也就是”拿数据做操作“面向对象思想强调”必须通过对象的形式来做事情“
  • 函数式思想则尽量忽略面向对象的复杂语法:”强调做什么,而不是以什么形式去做,而我们要学习的Lambda表达式就是函数式思想的体现“

1.1、体验Lambda表达式

需求:启动一个线程,在控制台输出一句话:多线程程序启动了

  • 定义一个类MyRunnable实现Runnable接口,重写run()方法
  • 创建MyRunnable类的对象
  • 创建Thread类的对象,把MyRunnable的对象作为构造参数传递
  • 启动线程

1.2、实现类的方式实现需求

package com.lambda;public class LambdaDemo1 {public static void main(String[] args) {MyRunnable myRunnable = new MyRunnable();Thread thread = new Thread(myRunnable);thread.start();//多线程程序启动了}}class MyRunnable implements Runnable {@Overridepublic void run() {System.out.println("多线程程序启动了");}
}

1.2、匿名内部类的方式改进

package com.lambda;public class LambdaDemo2 {public static void main(String[] args) {new Thread(new Runnable() {@Overridepublic void run() {System.out.println("多线程程序启动了");}}).start();//多线程程序启动了}
}

1.2、Lambda表达式的方式改进

package com.lambda;public class LambdaDemo2 {public static void main(String[] args) {//        new Thread(new Runnable() {
//            @Override
//            public void run() {
//                System.out.println("多线程程序启动了");
//            }
//        }).start();//多线程程序启动了new Thread(() -> System.out.println("多线程程序启动了")).start();//多线程程序启动了}
}

2、组成Lambda表达式的三要素

  • 形式参数、箭头、代码块

3、Lambda表达式的格式

  • 格式:(形式参数)->  (代码块)
  • 形式参数:如果有多个参数,参数之间用逗号隔开;如果没有参数、留空即可
  • ->  :    由英文中画线和大于符号组成,固定写法。代表指向动作
  • 代码块:是我们具体要做的事情,也就是以前我们写的方法体内容

4、Lambda表达式的使用前提

  • 有一个接口
  • 接口中有且仅有一个抽象方法

4.1、练习1:抽象方法无参数无返回值

  • 定义一个接口(Eatable),里面定义一个抽象方法:void eat();
  • 定义一个测试类(EatableDemo),在测试类中提供两个方法,一个方法是:useEatable(Eatable e),一个方法是主方法,在主方法中调用useEatable方法
package com.lambda;public class EatableDemo {public static void main(String[] args) {//        useEatable(new Eatable() {
//            @Override
//            public void eat() {
//                System.out.println("一天一苹果,医生远离我");
//            }
//        });useEatable(() -> System.out.println("一天一苹果,医生远离我"));//一天一苹果,医生远离我}public static void useEatable(Eatable e) {e.eat();}}interface Eatable {void eat();
}

4.2、练习2:抽象方法带参数无返回值

  • 定义一个接口(Flyable),里面定义一个抽象方法:void fly(String s);
  • 定义一个测试类(FlyableDemo),在测试类中提供两个方法,一个方法是:useFlyable(Flyable f),一个方法是主方法,在主方法中调用useFlyable方法
package com.lambda;public class FlyableDemo {public static void main(String[] args) {//        useFlyable(new Flyable() {
//            @Override
//            public void fly(String s) {
//
//                System.out.println(s + ",飞机自驾游");
//            }
//        });//        useFlyable((String s) -> System.out.println(s + ",飞机自驾游"));useFlyable(s -> System.out.println(s + ",飞机自驾游"));//风和日丽,晴空万里,飞机自驾游}public static void useFlyable(Flyable f) {f.fly("风和日丽,晴空万里");}
}interface Flyable {void fly(String s);
}

4.3、练习3:抽象方法带参数有返回值

  • 定义一个接口(Addable),里面定义一个抽象方法:int  add(int x,int y);
  • 定义一个测试类(AddableDemo),在测试类中提供两个方法,一个方法是:useAddable(Addable a),一个方法是主方法,在主方法中调用useAddable方法
package com.lambda;public class AddableDemo {public static void main(String[] args) {//        useAddable(new Addable() {
//            @Override
//            public int add(int x, int y) {
//                return x + y;
//            }
//        });//        useAddable((int x, int y) -> x + y);useAddable((x, y )-> x + y);//30}public static void useAddable(Addable a) {int sum = a.add(10, 20);System.out.println(sum);}
}interface Addable {int add(int x, int y);}

5、Lambda表达式的注意事项

  • 使用Lambda必须要有接口,并且要求接口中有且仅有一个抽象方法
  • 必须有上下文环境,才能推导出Lambda对应的接口
  1. 根据 局部变量的赋值 得知Lambda对应的接口:Runnable   r =  ()  ->  System.out.println ("Lambda表达式" ) ;
  2. 根据 调用方法的参数 得知Lambda对应的接口:new Thread(()-> System.out.println ( "Lambda表达式" )   ) . start ( ) ;
package com.lambda;public class LambdaDemo2 {public static void main(String[] args) {//        new Thread(new Runnable() {
//            @Override
//            public void run() {
//                System.out.println("Lambda表达式");
//            }
//        }).start();//Lambda表达式//        new Thread(() -> System.out.println("Lambda表达式")).start();//Lambda表达式Runnable r = () -> System.out.println("Lambda表达式");new Thread(r).start();//Lambda表达式}
}

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32F4XX/APM32F4XX USB OTA升级

近期在研究USB CDC协议,使用USB Virtual Port Com功能与上位机通讯做了OTA功能。开发平台:MDK529 开发硬件:APM32F411 首先看下手册Flash分布,Flash总共8个扇区。 接下来进行Flash分区。 扇区 0 和 扇区 1做Boo区。 扇区 2做APP跳…

添加YDNS免费的ipv6动态域名解析

背景 又到了一年一度的dns域名到期,寻找替代了,前几年用了阿里、华为的免费域名,支持了几个搭建在NAS上的微服务;一旦涉及到域名续费,价格就比首年上去了不少,所以,打算找个长期的免费域名。 搜…

学信网学历电子注册备案表 下载方法

如果你需要成人高考的专升本 那么就会需要 学信网学历电子注册备案表 全称叫 教育部学历证书电子注册备案表 是学信网依托全国高等教育学生信息数据库,对学生的学历信息提供的在线验证报告,是我们验证学历真伪的一份报告 学历电子注册备案表在 考研、考…

企业如何充分借助大数据下精准营销?

技术的发展和智能终端的普及移动互联网用户的大规模增长使移动互联网快速发展,使中国移动互联网软件进入移动互联网时代越来越多地涉及到改变生活大家习惯。移动互联网时代的到来也意味着大数据时代的到来。精准营销数据方法,移动互联网和大数据的兴起不…

Unity通过偏移UV播放序列帧动画

大家好,我是阿赵。   在Unity引擎里面用shader播放序列图,估计很多人都有用到了,我自己而已写过好几个版本。这里大概介绍一下。 一、原理 先说目的,我现在有一张这样的图片: 这张图片上面,有9个格子&a…

Power View

界面 切换可视化效果 对于已经上传到透视表的数据,选择power view,形成表格后。

vcruntime140_1.dll丢失的三个修复方法,【vcruntime140_1修复工具下载】

大家好!今天,我将为大家介绍一个关于计算机vcruntime140_1.dll丢失的问题。在我们的日常生活和学习中,计算机出现问题是常有的事情。有时候,我们可能会遇到一些令人头疼的问题,比如vcruntime140_1.dll丢失。那么&#…

利用frps搭建本地自签名https服务的透传

nginx的搭建就不介绍了,教程很多,基本上油手就会。 在本例中,frp服务器的域名是 www.yourfrp.com,同时也是反向代理nginx服务器; 本地网站要用的域名: test.abcd.com 请事先将 test.abcd.com 解析到 frp所在服务器…

springboot web开发springmvc自动配置原理

前言 我们也知道springboot启用springmvc基本不用做什么配置可以很方便就使用了但是不了解原理,开发过程中遇到点问题估计就比较头疼,不管了解的深不深入,先巴拉一番再说… 下面我们先看看官网…我的版本是2.3.2版本,发现官网改动也比较大…不同版本自己巴拉下吧,结构虽然变化…

vue项目——表情选择器

组件库地址&#xff1a;https://www.npmjs.com/package/emoji-mart-vue 1、下载 npm install --save emoji-mart-vue 2、引入 import { Picker } from emoji-mart-vueexport default {components: {Picker} }3、使用 <picker set"emojione" /> <picker …

kafka详解一

kafka详解一 1、消息引擎背景 根据维基百科的定义&#xff0c;消息引擎系统是一组规范。企业利用这组规范在不同系统之间传递语义准确的消息&#xff0c;实现松耦合的异步式数据传递. 即&#xff1a;系统 A 发送消息给消息引擎系统&#xff0c;系统 B 从消息引擎系统中读取 A…

又一关键系统上线,理想车云和自动驾驶系统登陆OceanBase

8 月 1 日&#xff0c;理想汽车公布 7 月交付数据&#xff0c;理想汽车 2023 年 7 月共交付新车 34,134 辆&#xff0c;同比增长 227.5%&#xff0c;并已连续两个月交付量突破三万。至此&#xff0c;理想汽车 2023 年累计交付量已经达到 173,251 辆&#xff0c;远超 2022 年全年…

protues仿真时有时候串口虚拟中端不弹窗的问题

在使用proteus的时候&#xff0c;有时候你会发现点击调试开始运行后&#xff0c;串口虚拟终端没有自动弹窗的问题&#xff0c;其实照成这种现象的原因是你在使用的过程中移动了器件位置或者是对整个视窗使用鼠标滚动进行缩放了&#xff0c;如果要重新弹窗则需要进行以下操作: …

以antd为例 React+Typescript 引入第三方UI库

本文 我们来说说 第三方UI库 其实应用市场上的 第三方UI库都是非常优秀的 那么 react 我们比较熟的肯定还是 antd 我们还是来用它作为演示 这边 我们先访问他的官网 https://3x.ant.design/index-cn 点击开始使用 在左侧 有一个 在 TypeScript 中使用 通过图标我们也可以看出…

2022年03月 C/C++(六级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C++编程(1~8级)全部真题・点这里 第1题:多项式相加 我们经常遇到两多项式相加的情况, 在这里, 我们就需要用程序来模拟实现把两个多项式相加到一起。 首先, 我们会有两个多项式,每个多项式是独立的一行, 每个多项式由系数、 幂数这样的多个整数对来表示。 如多项式 2…

一个面向MCU的小型前后台系统

JxOS简介 JxOS面向MCU的小型前后台系统&#xff0c;提供消息、事件等服务&#xff0c;以及软件定时器&#xff0c;低功耗管理&#xff0c;按键&#xff0c;led等常用功能模块。 gitee仓库地址为&#xff08;复制到浏览器打开&#xff09;&#xff1a; https://gitee.com/jer…

Spring Boot日志基础使用 设置日志级别

然后 我们来说日志 日志在实际开发中还是非常重要的 即可记录项目状态和一些特殊情况发生 因为 我们这里不是将项目 所以 讲的也不会特别深 基本还是将Spring Boot的日志设置或控制这一类的东西 相对业务的领域我们就不涉及了 日志 log 初期最明显的作用在于 开发中 你可以用…

Java智慧工地源码 智慧工地APP源码

Java智慧工地源码 智慧工地APP源码 系统定义&#xff1a; 智慧工地信息化管理平台是依托计算机信息、网络通讯、物联网、系统集成及云计算技术&#xff0c;通过数据采集、信息动态交互、智能分析&#xff0c;建立起来的一套集成的项目建设综合管理系统。实现项目管理信息化、网…

【重要】NAND Flash基础知识简介

NAND Flash是一种非易失存储介质&#xff08;掉电后数据不会丢失&#xff09;&#xff0c;常见的U盘、TF卡/SD卡&#xff0c;以及大部分SSD&#xff08;固态硬盘&#xff09;都是由它组成的。 本文主要介绍其组成及工作原理。 为了表述方便&#xff0c;后面所说的Flash仅指NAN…

什么是Flex容器和Flex项目(Flex Container and Flex Item)?它们之间有什么关系?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ Flex容器和Flex项目⭐ Flex容器⭐ Flex项目⭐ 关系⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为…