【java】Lambda表达式

news2024/11/13 18:35:06

文章目录

  • 体验Lambda表达式
  • Lambda表达式的标准格式
  • Lambda表达式的练习
    • 抽象方法无参无返回值
    • 抽象方法带参无返回值
    • 抽象方法带参带返回值
  • Lambda表达式的省略模式
  • Lambda表达式的注意事项
  • Lambda表达式和匿名内部类的区别

体验Lambda表达式

在这里插入图片描述
在这里插入图片描述

package heima.Lambda;

import heima.多线程.other.MyRunnable;

public class FirstFeel {
    public static void main(String[] args) {
        //实现类的方式实现需求
//        MyRunnable my = new MyRunnable();
//        Thread t = new Thread(my);
//        t.start();

        //匿名内部类的方式改进
//        new Thread(new Runnable() {
//            @Override
//            public void run() {
//                System.out.println("多线程程序启动了");
//            }
//        }).start();

        //Lambda表达式的方式改进
        new Thread(()->{
            System.out.println("多线程程序启动了");
        }).start();
    }
}

Lambda表达式的标准格式

在这里插入图片描述

Lambda表达式的练习

抽象方法无参无返回值

在这里插入图片描述

package heima.Lambda.表达式的练习;

public interface Eatable {
    void eat();
}

package heima.Lambda.表达式的练习;

public class EatableImpl implements Eatable{
    @Override
    public void eat() {
        System.out.println("一天一苹果,医生远离我");
    }
}

package heima.Lambda.表达式的练习;

public class EatableDemo {
    public static void main(String[] args) {
        //在主方法中调用useEatable方法 1
        Eatable e = new EatableImpl();
        useEatable(e);

        //匿名内部类 2
        useEatable(new Eatable() {
            @Override
            public void eat() {
                System.out.println("一天一苹果,医生远离我");
            }
        });

        //lambda表达式 3
        useEatable(()->{
            System.out.println("一天一苹果,医生远离我");
        });
    }

    private static void useEatable(Eatable e){
        e.eat();
    }
}

输出:
在这里插入图片描述

抽象方法带参无返回值

在这里插入图片描述

package heima.Lambda.表达式的练习.练习2;

public class FlyableDemo {
    public static void main(String[] args) {
        //在主方法中调用useFlyable方法
        //匿名内部类
        useFlyable(new Flyable() {
            @Override
            public void fly(String s) {
                System.out.println(s);
                System.out.println("飞机自驾游");
            }
        });
        System.out.println("-------------");

        //lambda
        useFlyable((String s)->{
            System.out.println(s);
            System.out.println("飞机自驾游");
        });
    }
    private static void useFlyable(Flyable f){
        f.fly("风和日丽,晴空万里");
    }
}

package heima.Lambda.表达式的练习.练习2;

public interface Flyable {
    void fly(String s);
}

抽象方法带参带返回值

在这里插入图片描述

package heima.Lambda.表达式的练习.练习3;

public interface Addable {
    int add(int x,int y);
}

package heima.Lambda.表达式的练习.练习3;

public class AddableDemo {
    public static void main(String[] args) {
        //在主方法中调用useAddable方法
        useAddable((int x,int y)->{
            return x-y;
        });
    }

    private static void useAddable(Addable a){
        int sum = a.add(10,20);
        System.out.println(sum);
    }
}

Lambda表达式的省略模式

在这里插入图片描述

package heima.Lambda.表达式的省略;

public interface Flyable {
    void fly(String s);
}

package heima.Lambda.表达式的省略;

public interface Addable {
    int add(int x,int y);
}

package heima.Lambda.表达式的省略;

public class LambdaDemo {
    public static void main(String[] args) {
        //普通表达式
        useAddable((int x,int y)->{
            return x+y;
        });
        //参数的类型可以省略
        useAddable((x,y)->{
            return x+y;
        });
        //但是有多个参数的情况下,不能只省略一个 err
//        useAddable((x,int y)->{
//            return x+y;
//        });

        useFlyable((String s)->{
            System.out.println(s);
        });
    }
    private static void useFlyable(Flyable f){
        f.fly("风和日丽,晴空万里");
    }
    private static void useAddable(Addable a){
        int sum = a.add(10,20);
        System.out.println(sum);
    }
}

在这里插入图片描述

Lambda表达式的注意事项

在这里插入图片描述

package heima.Lambda.表达式的注意事项;

public interface Inter {
    void show();
}

package heima.Lambda.表达式的注意事项;

public class LambdaDemo {
    public static void main(String[] args) {
        useInter(()->{
            System.out.println("好好学习,天天向上");
        });

        //使用Lambda必须要有接口,并且要求接口中有且仅有一个抽象方法
//        useInter(()-> System.out.println("好好学习天天向上"));

        //必须有上下文环境,才能推导出Lambda对应的接口
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("匿名内部类");
            }
        }).start();

//        Runnable r = ()-> System.out.println("Lambda表达式");
//        new Thread(r).start();
        new Thread(()-> System.out.println("Lambda表达式")).start();
    }
    public static void useInter(Inter i){
        i.show();
    }
}

Lambda表达式和匿名内部类的区别

  • 首先准备好三个不同的类
package heima.Lambda.Lambda表达式和匿名内部类区别;

public interface Inter {
    void show();
}

package heima.Lambda.Lambda表达式和匿名内部类区别;

public class Student {
    public void study(){
        System.out.println("爱生活,爱java");
    }
}

package heima.Lambda.Lambda表达式和匿名内部类区别;

public abstract class Animal {
    public abstract void method();
}

  • 初始版
package heima.Lambda.Lambda表达式和匿名内部类区别;

public class LambdaDemo {
    public static void main(String[] args) {
        //匿名内部类
        useInter(new Inter() {
            @Override
            public void show() {
                System.out.println("接口");
            }
        });

        useAnimal(new Animal() {
            @Override
            public void method() {
                System.out.println("抽象类");
            }
        });

        useStudent(new Student(){
            @Override
            public void study() {
                System.out.println("具体类");
            }
        });

        System.out.println("=====================");

        //Lambda
        useInter(()-> System.out.println("接口"));

    }
    private static void useStudent(Student s){
        s.study();
    }

    private static void useAnimal(Animal a){
        a.method();
    }

    private static void useInter(Inter i){
        i.show();
    }
}

在这里插入图片描述

  • 当接口内部有两个方法时

在这里插入图片描述
在这里插入图片描述

只有匿名内部类可以使用其中的方法

  • 注:两者的构造方法不同

在这里插入图片描述

匿名内部类创建时,会另开一个classs文件

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

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

相关文章

HTML5期末大作业:旅游网页设计与实现——旅游风景区网站HTML+CSS+JavaScript 景点静态网页设计 学生DW静态网页设计

👨‍🎓静态网站的编写主要是用 HTML DⅣV CSSJS等来完成页面的排版设计👩‍🎓,一般的网页作业需要融入以下知识点:div布局、浮动定位、高级css、表格、表单及验证、js轮播图、音频视频Fash的应用、uli、下拉…

JMeter入门教程(9) --参数化

文章目录1.任务背景2.任务目标3.任务实操3.1 CSV数据文件1.任务背景 参数化是测试过程中很常用的一种技巧,可以将脚本中的某些输入用参数来代替,比如登陆时传递参数,在脚本运行时指定参数的取值范围和规则 2.任务目标 掌握基于JMeter性能测…

【浅学Java】SpringBoot创建和使用

SpringBoot创建和使用1. SpringBoot是什么2. SpringBoot的优点3. SpringBoot的创建3.1 使用idea创建3.2 测试项目_输出hello3.3 网页版创建SpringBoot4. 约定大于配置1. SpringBoot是什么 Spring的诞生是为了简化Java开发而创建的,而SpringBoot的诞生就是为了简化S…

一文带你理解【自然语言处理(NLP)】的基本概念及应用

觉得有帮助请点赞关注收藏~~~ 1.1 自然语言处理 1.1.1 自然语言处理主要研究对象 自然语言处理(Natural Language Processing:NLP)是以人类社会的语言信息(比如语音和文本)为主要研究对象,利用计算机技术来…

C++:深拷贝和浅拷贝——拷贝构造、赋值构造必须自定义

https://www.bilibili.com/video/BV1qT4y1X7cQ/?spm_id_from333.337.search-card.all.click&vd_sourced33b44674c517c8b7928e8d3ac316b37 1、赋值运算符重载 浅拷贝的错误代码: class Distance { public:int* dis NULL;Distance(int a){dis new int(a);}~…

轻量级xshell+manager远程监控jvisualvm

一、服务器端(Linux,最小安装模式,没有图形界面) 1.安装xauth 如果在Xshell中配置了X11转发后,出现如下提示: WARNING! The remote SSH server rejected X11 forwarding request. 则需要查看/etc/ssh/s…

esxi 6.7下安装openwrt(iStoreOS)网卡直通

esxi 6.7下安装openwrt(iStoreOS)网卡直通 esxi上创建一个iStoreOS系统的虚拟机,当主路由使用,网卡直通方式 1、工具 硬件: 工控机:装有esxi6.7系统(192.168.100.2),配…

图像仿射变换与双线性插值

图像变换 下面的所有变换假设都是针对一幅图像,即一个三维数组(HWC),这里为简单起见,假设图像都是单通道(C1)的。 (x,y)(x,y)(x,y): 原图像中某一点 A 的位置(x′,y′)(x′,y′)(x′,y′): 变换…

记一次系统重装后电脑的优化设置

总目录 文章目录总目录前言一、Windows设置1.系统2.应用3.隐私4.更新与安全二、系统使用偏好设置1.设置远程协助2.文件资源管理器偏好设置3.用户账户控制设置4.修改桌面文件的路径5.根据需求删除系统自带的无用的软件总结前言 由于之前总是电脑用着用着C盘不是满了&#xff0c…

Spring框架(九):Spring注解开发Annotation

Spring注解开发引子如何用注解替代xml基础配置Bean可以加一些注解来实现原有的xml文件的功能Component注解及其衍生注解依赖注入AutowireSpring非自定义的注解开发Spring其他注解注解的原理解析-xml方式注解的原理解析-注解方式注解整合MyBatis框架注解整合第三方框架引子 痛定…

一篇文章让你搞懂Java顺序表

目录 一、 线性表的基本介绍 二、顺序表 1、顺序表的概念 2. 创建顺序表类(ArrayList) 2. 增加元素 3. 删除元素 4. 修改某个元素 5. 查找元素 Main类 在数据结构体系中我们将整个数据结构分为两类,一类是线性结构; 线性…

微电网两阶段鲁棒优化经济调度方法(完美复现)

针对微电网内可再生能源和负荷的不确定性,建立了 min-max-min 结构的两阶段鲁棒优化模型,可得到最恶劣场 景下运行成本最低的调度方案。模型中考虑了储能、需求侧 负荷及可控分布式电源等的运行约束和协调控制,并引入了 不确定性调节参数&…

Java基于springboot+vue+element医疗用品销售购物商城系统 前后端分离

开发背景和意义 网络购物己经成为一个常态化的消费手段,足不出户即可享受互联网发展的红利,对于购物商城的应用,普通消费者目前普遍使用。医疗用品作为一个大众消费的商品,由于其健康的特点,也越来越为大家喜欢&#…

TypeScript 知识点总结

对于有着强制类型语言经验的开发来讲,刚开始接触 JavaScript 的时候,大多都有一种 “心如芒刺,如鲠在喉” 的感觉。 从最初的好感 -——开放包容,到后来的厌恶之情——放荡不羁 TypeScript 犹如黑暗之中的一缕阳光,拯救…

【单片机基础】ADC0832详解

文章目录一、ADC0832介绍1、功能特点2、引脚说明3、ADC0832与单片机接口4、工作时序二、例程一、ADC0832介绍 ADC0832 是美国国家半导体公司生产的一种8 位分辨率、双通道A/D转换芯片。由于它体积小,兼容性,性价比高而深受单片机爱好者及企业欢迎&#x…

Java_笔记_static_静态变量方法工具类_main方法

static表示静态,是Java中的一个修饰符,可以修饰成员方法和成员变量。 一、静态变量: 被static修饰的成员变量 1.特点: 1)被该类所有的对象共享。 2)不属于对象,属于类。 3)随着类的加载而加载…

(个人记录)Ensight后处理EDEM学习笔记

①EDEM计算完毕 ②左上角,点击输出data 先点击一下 然后再把EXPORT FORMAT改为ensight的格式 file name选择要保存到的文件夹,保存格式为.case文件 设置保存的时间步 填入“10”的意思是0.01*10=0.1,在ensight中以0.1的时间步展示结果 点击queries 在ensight里只能…

七段显示译码器

我们会把它放在系统中来显示多位,很多位的表达会用到小数点 12.34 我只想显示,我现实系统的数字大小有一个范围,比如整数四位,小数四位 我显示12.34 就意味着首先两位就是空着,最后两位也是空着 这几位从输入的数字…

Android 基础知识4-1 用户界面简介VIewGroup、Onclick事件处理

引言: 一个好的应用界面的必备条件是:内容清楚、指示明白、屏幕美观和有亲切感。界面通常包含图形和文字。应用界面的设计是对控件进行适当的取舍及功能的选择和处理的过程。在程序设计中,需要对设计的方法反复推敲、琢磨,才能使其…

spfa算法判断负环【什么是负环】【出现负环会怎么样】【牢记,此时不是求最短路】

欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录) 文章字体风格: 红色文字表示:重难点 蓝色文字表示:思…