lambda表达式(详)

2023-10-29

函数式编程思想概括:

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

1.2体验Lambda表达式

需求:启动一个线程,在控制台输出一句话:多线程程序启动了
方式1:
●定义一个类MyRunnable实现Runnable接口, 重写run0方法
创建MyRunnable类的对象

创建Thread类的对象,把MyRunnable的对象作为构造参数传递
启动线程
方式2:
●匿名内部类的方式改进
方式3:

Lambda表达式的方式改进

public class Myrun implements Runnable {
    @Override
    public void run() {
        System.out.println("张岩是舔狗!!!");
    }
}







public class Lambda01 {
    public static void main(String[] args) {
        //调用对象
        Myrun run=new Myrun();
        Thread t=new Thread(run);
        t.start();
        //匿名内部类方式
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("张岩是舔狗!!!");
            }
        }).start();
        //lambda:
        new Thread(()->{
            System.out.println("张岩是舔狗!!!");
        }).start();;
    }
}

1.3 Lambda表达式的标准格式

匿名内部类中重写run0方法的代码分析

       new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("张岩是舔狗!!!");
            }
        }).start();


●方法形式参数为空,说明调用方法时不需要传递参数
●方法返回值类型为void,说明方法执行没有结果返回
●方法体中的内容, 是我们具体要做的事情
Lambda表达式的代码分析

new Thread(()->{
    System.out.println("张岩是舔狗!!!");
}).start();;

●(): 里面没有内容,可以看成是方法形式参数为空
-●>:用箭头指向后面要做的事情

●{}:包含一 段代码,我们称之为代码块,可以看成是方法体中的内容


组成Lambda表达式的三s要素:形式参数,箭头,代码块

Lambda表达式的格式

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

注意:前提:

有一个接口;

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

练习1:(最详细的写法每一步都清楚)

●定义一个接口(Eatable), 里面定义一个抽象方法: void eat0;
●定义一个测试类(Lamdba02), 在测试类中提供两个方法
●一个方法是: useEatable(Eatable e)
●一个方法是主方法,在主方法中调用useEatable方法

package lambda;

public interface Eatable {
    void eat();
}




package lambda;

//        ●定义一个接口(Eatable), 里面定义-一个抽象方法: void eat0;
//        ●定义一个测试类(EatableDemo), 在测试类中提供两个方法
//        ●一个方法是: useEatable(Eatable e)
//        ●一个方法是主方法,在主方法中调用useEatable方
public class Lambda02 {
    private static void useEatable(Eatable e){
    e.eat();
    }
    public static void main(String[] args) {

        useEatable(()->{
            System.out.println("张岩是舔狗");
        });

    }
}

练习2:(最为大众的写法,写起来简单快捷)

变为两个参数:


package lambda;

public class Lambda04 {
    public static void main(String[] args) {
        Eatable01 e=(x, y)->//x,y的类型可以省略
            System.out.println(x+y);
        //只有一个语句花括号也可以省略
        e.zhou(2021,"海绵hong更帅");
    }
    public interface Eatable01 {
        void zhou(int x,String y);
    }
}



省略条件:

  1.         方法的类型可以省略
  2.         只有一个语句花括号也可以省略(除return不行)
  3.         只有一个参数,括号也可以省略
  4.         只有一条语句省略花括号也要吧return也要省略

        

package lambda;


public class Lambda03 {
    public static void main(String[] args) {
        Addable add=(x,y)->x+y;
        System.out.println(add.add(123,123));
    }
    public interface Addable {
        int  add(int x,int y);
    }


}



 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

lambda表达式(详) 的相关文章

随机推荐

  • Moba游戏帧同步的技术原理与重点难点

    一 帧同步的技术原理 帧同步是通过在数据传输过程中插入同步字节或同步信号来保证数据的同步 它主要通过以下几个步骤实现 对啦 这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白 也有一些正在从事游戏开发的技术大佬 欢迎你来交流学习
  • <逆波兰表达式求值>

    描述 给你一个字符串数组 tokens 表示一个根据 逆波兰表示法表示的算术表达式 请你计算该表达式 返回一个表示表达式值的整数 注意 有效的算符为 和 每个操作数 运算对象 都可以是一个整数或者另一个表达式 两个整数之间的除法总是 向零截
  • Linux装jdk并配置环境详细步骤

    Linux装jdk并配置环境详细步骤 1 创建文件使用命令mkdir usr local jdk 2 通过xshell传上来的文件都在 root目录下通过命令ls可以查看然后需要移动文件移动文件位置mv jdk 8u161 linux x6
  • Java——接口与实现类

    目录 接口 实现接口 常用接口 java util Comparator Arrays sort Object arr Comparator c 常用接口 java lang Comparable Arrays sort Object ar
  • Appuploader 常见错误及解决方法

    问题解决秘籍 1 遇到问题 第一个请登录苹果开发者官网 检查一遍账号是否有权限 是否被停用 是否过期 是否有协议需要同意 并且在右上角切换账号后检查所有关联的账号是否工作正常 apple账号的邮箱也是个重要的地方 当有ipa上传 账号有发生
  • 搭建SpringCloud项目,并实现自动化部署

    在当今云计算时代 微服务架构已经成为企业开发的常见选择 而SpringCloud作为Java领域中最为流行的微服务框架之一 其提供的各种组件能够帮助开发者快速搭建微服务应用 本文将介绍如何搭建SpringCloud项目 并实现自动化部署 一
  • sessionStorage和localStorage的区别

    今天就来说一下sessionStorage和localStorage的区别以及使用 sessionStorage 内存 sessionStorage大约能存储5M左右 生命周期 浏览器窗口关闭就自动销毁 属性方法 存储数据 sessionS
  • qt使用QTreeWidget实现一个树结构显示数据

    效果图 include
  • MYSQL解决 The total number of locks exceeds the lock table size 问题

    当我们对Mysql 中的表进行大批量的分组 查询 创建的时候经常会出现这个问题 他翻译过来大概是这个意思 总数已经超过锁定表的大小 一般出现这个原因会有两种可能 1 MySQL的临时表过小也就是tmp table size tmp tabl
  • 4、QT中的网络编程

    一 Linux中的网络编程 1 子网和公网的概念 子网网络 局域网 只能进行内网的通信 公网网络 因特网 服务器等可以进行远程的通信 2 网络分层模型 4层模型 应用层 传输层 网络层 物理层 应用层 用户自定义的网络数据传输协议 ssh
  • Kotlin中继承、类型转换、Any超类、object关键字详解

    博主前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住也分享一下给大家 点击跳转到教程 一 继承 类型转换 Any超类 继承 Kotlin中类默认都是封闭的 要让某个类开放继承 必须使用open关键字修饰它 open cla
  • 解决idea一直Indexing的问题

    解决idea一直Indexing的问题 参考文章 1 解决idea一直Indexing的问题 2 https www cnblogs com boshen hzb p 9012445 html 备忘一下
  • 见微知著:从企业售后技术支持看云计算发展

    售后业务中的细微变化 作为阿里云企业容器技术支持的一员 每天会面对全球各地企业级客户提出的关于容器的各种问题 通过这几年的技术支持的经历 逐步发现容器问题客户的一些惯性 哪些是重度用户 哪些是轻度客户 这些客户大概分布在什么行业等等 在渐渐
  • 数字图像处理——图像的点运算

    图像的点运算 一 灰度直方图 imhist 二 灰度线性变换 imadjust 三 灰度非线性变换 1 灰度对数变换 log 2 灰度幂次变换 3 灰度指数变换 exp 四 灰度阈值变换 im2bw 五 灰度拉伸 六 灰度均衡 histeq
  • Windows下安装EISeg交互式分割标注软件

    EISeg 下载 配置环境 启动 下载模型 GitHub地址 Gitee码云地址 我的资源里面也有 下载 进入GitHub开源地址 点击图示位置下载zip文件 码云同理 配置环境 然后把这个放入你自定义的文件目录下 最好是英文路径 然后进入
  • vue使用医学影像cornerstone展示dcm文件

  • React 中 keys 的作用是什么?

    React 中 keys 的作用是什么 Keys 是 React 用于追踪哪些列表中元素被修改 被添加或者被移除的辅助标识 在开发过程中 我们需要保证某个元素的 key 在其同级元素中具有唯一性 在React Diff 算法中 React
  • git-推送分支

    origin为远程仓库名 命令 git push origin local branch remote branch 备注 此命令中 local branch必须为你本地存在的分支 remote branch为远程分支 如果remote b
  • 为什么要反复讲EasyAVFilter这个东西,真能替代ffmpeg吗?

    最近我写了不少关于EasyAVfilter的东西 有rtsp转mp4 MP4转HLS rtsp转rtmp 就简简单单几行代码 就能解决很多技术上的问题 而且就算是音视频开发的小白 也可以用EasyAVfilter开发出一个音视频后端出来 他
  • lambda表达式(详)

    函数式编程思想概括 在数学中 函数就是有输入量 输出量的一套计算方案 也就是 拿数据做操作 面向对象思想强调 必须通过对象的形式来做事情 函数式思想则尽量忽略面向对象的复杂语法 强调做什么 而不是以什么形式去做 而我们要学习的L ambda