【Java基础】我不允许还有人搞不懂lambda表达式!!!

news2024/11/18 13:05:42
  • λ希腊字母表中排序第十一位的字母
  • 避免匿名内部类定义过多,使得代码更加简洁
  • 其实质属于函数式编程的概念
(params)->expression[表达式]
(params)->statement[语句]
(params)->{statements}

lambda表达式推导过程:

  1. 创建一个类,重写接口中的抽象方法
class Demo16{
	public static void main(String[] args){
    	Test test=new Test();
		int sum = test.add(5,6);
		System.out.println(sum);
	}
}
interface inter{
	int add(int a,int b);
}
class Test implements inter{
	public int add(int a,int b)	{
		return a+b;
	}
}
  1. 使用静态内部类
class Demo16{
    static class Test implements inter{
        public int add(int a,int b)	{
			return a+b;
		}
    }
	public static void main(String[] args){
    	Test test=new Test();
		int sum = test.add(5,6);
		System.out.println(sum);
	}
}
interface inter{
	int add(int a,int b);
}
  1. 局部内部类
class Demo16{
	public static void main(String[] args){
	    class Test implements inter{
	        public int add(int a,int b)	{
				return a+b;
			}
    	}
        Test test=new Test();
		int sum = test.add(5,6);
		System.out.println(sum);
	}
}
interface inter{
	int add(int a,int b);
}
  1. 匿名内部类
class Demo16{
	public static void main(String[] args){
        inter test=new inter(){
            public int add(int a,int b)	{
				return a+b;
			}
        };
		int sum = test.add(5,6);
		System.out.println(sum);
	}
}
interface inter{
	int add(int a,int b);
}
  1. 用lambda简化
class Demo16{
	public static void main(String[] args){
        inter test=(a,b)->a+b;
		int sum = test.add(5,6);
		System.out.println(sum);
	}
}
interface inter{
	int add(int a,int b);
}

函数式接口

  • 使用lambda表达式的前提条件: **
    必须是
    接口**,且接口中只包含唯一一个抽象方法(有且仅有一个必须被重写的方法),这样的接口叫函数式接口
@FunctionalInterfaces
public interface Runnable{
    public abstract void run();
}
  • @FunctionalInterface
    检测是否是函数式接口

函数式接口判断

interface inter1{//是函数式接口
	void show();
}
interface inter2{//不是函数式接口
	void show();
	void test();
}
interface inter3 extends inter1{}//是函数式接口
interface inter4{//是函数式接口
	void show();
	static void ff(){
		System.out.println("ff");
	}
}
interface inter5{//是函数式接口
	void ff();
	default void show(){
		System.out.println("show");
	}
}
interface inter6{//是函数式接口
	void show();
	String toString();//不需要被重写
}
@FunctionalInterface //检测是否是函数式接口
interface inter7{}//不是函数式接口
class  Demo17{
	public static void main(String[] args){…………}
}

简化书写

  • 大括号中只有一行代码,那么大括号可以省略
  • 大括号中只有一行代码,且这行代码是返回语句,那么return可以省
  • 只有一个参数,小括号可以省;没有参数,小括号不可以省
  • 数据类型可以省,数据类型要省都省

练习

lambda表达式的练习

interface NoneParamNoneReturn{
	void test();
}
interface OneParamNoneReturn{
	void test(int a);
}
interface MultiParamNoneReturn{
	void test(int a,int b);
}
interface NoneParamAndReturn{
	int test();
}
interface OneParamAndReturn{
	int test(int a);
}
interface MultiParamAndReturn{
	int test(int a,int b);
}
class Demo18{
	public static void main(String[] args){
        //使用lambda表达式实现接口
        ……………………
	}
}
NoneParamNoneReturn inter1=() -> sop("hehe");
inter1.test();
OneParamNoneReturn inter2= a-> sop(a);
inter2.test(6);
MultiParamNoneReturn inter3=(a,b) -> sop(a+b);
inter3.test(5,6);
NoneParamAndReturn inter4=()->66;
sop(inter4.test());
OneParamAndReturn inter5=a-> a;
sop(inter5.test(44));
MultiParamAndReturn inter6=(a,b)->a+b;
sop(inter6.test(11,88));

方法引用 : :

静态方法引用

函数式接口中的方法的参数及返回值和被引用的方法的参数及返回值一致

非静态方法引用

class Demo {
	public static void main(String[] args){
        //静态方法引用
		inter in=Calculate::calculate;//(a,b)->a+b;
        //非静态方法引用
		inter in=new Calculate()::calculate;//(a,b)->a+b;
		int num=in.test(5,6);
		System.out.println(num);
	}
}
interface inter{
	int test(int a,int b);
}
class Calculate{
	public static int calculate(int a,int b){
		return a+b;
	}
}

构造方法引用

函数式接口中的方法的返回值是一个引用类型,参数和构造方法一致

class Demo4{
	public static void main(String[] args){
		inter in=Person::new;//()->new Person();
		Person ren1=in.test();
		System.out.println(ren1);//null,0
		inter2 in2=Person::new;
       			 //(name,age)->new Person("李四",20);
		Person ren2=in2.test("李四",20);
		System.out.println(ren2);//李四,20
	}
}
interface inter{
	Person test();
}
interface inter2{
	Person test(String name,int age);
}
class Person{…………}

其他引用

  1. 函数式接口中的方法的参数是引用类型,方法的实现只是调用该引用类型参数的某个方法
  2. 函数式接口中的方法的一个参数是引用类型,其余参数是调用该引用类型参数的某个方法需要接收的参数
  3. 函数式接口中的方法的参数是引用类型,方法的实现只是调用该引用类型的参数的某个方法
class Demo3{
	public static void main(String[] args) {
		ShowInfo show1=Person::show;//person->person.show();
		show1.showInfo(new Person());
		SetInfo sets=Person::setName;
        		   //(person,name)->person.setName(name)
		sets.setInfo(new Person(),"张三");
		GetInfo gets=Person::getName;//person->person.getName();
		String str=gets.getInfo(new Person("李四",25));
		System.out.println(str);
	}
}
interface ShowInfo{
	void showInfo(Person person);
}
interface SetInfo{
	void setInfo(Person person,String name);
}
interface GetInfo{
	String getInfo(Person person);
}
class Person{…………}

在这里插入图片描述

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

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

相关文章

HTML特殊字符

特殊字符 有特殊含义的字符成为字符实体 对于有特殊含义的字符,需要通过转移字符来表示 <span> <br><a href"http://www.atguigu.com">我 爱 前端</a> <br>&amp;amp; 效果

前端CSS3基础1(新增长度单位,盒子模型,背景,边框,文本属性,渐变,字体,2D变换,3D变换)

前端CSS3基础1&#xff08;新增长度单位&#xff0c;盒子模型&#xff0c;背景&#xff0c;边框&#xff0c;文本属性&#xff0c;渐变&#xff0c;字体&#xff0c;2D变换&#xff0c;3D变换&#xff09; CSS3 新增长度单位CSS3 新增盒子模型相关属性box-sizing怪异盒模型box-…

10G UDP协议栈 IP层设计-(6)IP TX模块

一、模块功能 1、上层数据封装IP报文头部 2、计算首部校验和 二、首部校验和计算方法 在发送方&#xff0c;先把IP数据报首部划分为许多16位字的序列&#xff0c;并把检验和字段置零。用反码算术运算把所有16位字相加后&#xff0c;将得到的和的反码写入检验和字段。接收方收…

分布式系统的一致性与共识算法(二)

Consitency 背景 如买最后一张车票&#xff0c;两个售票处分别通过某种方式确认过这张票的存在。这时&#xff0c;两家售票处几乎同时分别来了一个乘客要买这张票&#xff0c;从各自"观察"看来&#xff0c;自己一方的乘客都是先到的&#xff0c;这种情况下&#xf…

【Shell脚本】Shell编程之数组

目录 一.数组 1.基本概念 2.定义数组的方法 2.1.方法一 2.2.方法二 2.3.方法三 2.4.方法四 2.5.查看数组长度 2.6.查看数组元素下标 3.数组分片 4.数组字符替换 4.1.临时替换 4.2.永久替换 5.数组删除 5.1.删除某个下标 5.2.删除整组 6.数组遍历和重新定义 7…

sql操作、发送http请求和邮件发送 全栈开发之路——后端篇(2)

全栈开发一条龙——前端篇 第一篇&#xff1a;框架确定、ide设置与项目创建 第二篇&#xff1a;介绍项目文件意义、组件结构与导入以及setup的引入。 第三篇&#xff1a;setup语法&#xff0c;设置响应式数据。 第四篇&#xff1a;数据绑定、计算属性和watch监视 第五篇 : 组件…

国内好用的测试用例管理工具有哪些?

目前市面上的测试用例管理工具有很多&#xff0c;但由于针对的项目、领域、目标用户&#xff0c;功能也并不一致&#xff0c;所以选择一款适合的测试管理平台并不轻松。做好这件事&#xff0c;首先要需求明确你用测试管理工具干什么&#xff1f;最终想要达到什么目标&#xff1…

基于UnetPlusPlus(Unet++)实现的医学图像分割

1、前言 unetPlusPlus 在unet 的基础上增添了密集连接的结构&#xff0c;有点像densenet网络 因为这种密集连接&#xff0c;unet可以实现剪枝的轻量化操作。由于本人的没有接触过这种剪枝、蒸馏之类的轻量化方法&#xff0c;所以不多赘述 本章仅仅根据unet模型实现医学图像分…

西门子博途WINCC精致触摸屏配方实用一例

我们现场有一台设备&#xff0c;是用来锯切钢坯的&#xff0c;里面有几个重要的参数&#xff0c;一开始投产的时候厂家没有做配方功能&#xff0c;需要操作人员每次换钢坯就需要手动计算然后输入&#xff0c;后来有时间我就做了个这个定尺管理的功能&#xff0c;方便了操作人员…

汇昌联信电商:拼多多网店好做吗?

在电子商务的海洋中&#xff0c;拼多多以其独特的团购模式和亲民策略迅速崛起&#xff0c;吸引了大批消费者和商家的目光。对于“拼多多网店好做吗?”这个问题&#xff0c;答案并非简单的是与否&#xff0c;而是需要从多个维度进行深入分析。 一、市场定位与竞争环境 拼多多定…

华为开源自研AI框架昇思MindSpore应用案例:在ResNet-50网络上应用二阶优化实践

常见的优化算法可分为一阶优化算法和二阶优化算法。经典的一阶优化算法如SGD等&#xff0c;计算量小、计算速度快&#xff0c;但是收敛的速度慢&#xff0c;所需的迭代次数多。而二阶优化算法使用目标函数的二阶导数来加速收敛&#xff0c;能更快地收敛到模型最优值&#xff0c…

TCP的滑动窗口机制和流量控制

目录 滑动窗口 流量控制 拥塞控制 滑动窗口 TCP除了保证可靠性之外&#xff0c;也希望能够尽可能高效的完成数据传输。滑动窗口就是一种提高效率的机制。以下是不引入滑动窗口的数据传输过程&#xff1a; 可以看到&#xff0c;主机A这边每次收到一个ACK才发送下一个数据。这…

接口、会话控制

文章目录 接口介绍RESTful APIjson-server接口测试工具apipost公共参数和文档功能 会话控制cookie介绍和使用运行流程浏览器中操作Cookieexpress中cookie操作 Sessionsession运行流程&#xff1a;session中间件配置session 和 cookie 的区别CSRF跨站请求伪造 tokenJWT介绍与演示…

数据新探:用Python挖掘互联网的隐藏宝藏

Hello&#xff0c;我是你们的阿佑&#xff0c;今天给大家上的菜是——数据存储&#xff01;听起来枯燥无味&#xff1f;错了&#xff01;阿佑将带你重新认识数据存储的艺术。就像为珍贵的艺术品寻找完美的展览馆&#xff0c;为你的数据选择合适的存储方式同样重要&#xff01; …

2022-1990年 各省碳排放Co2数据集(含数据及参考文献)

碳排放是指人类活动产生的二氧化碳&#xff08;CO2&#xff09;等温室气体释放到大气中的过程。通过划分排放源的范围以避免重复计算的思想&#xff0c;由世界资源研究所在关于企业温室气体排放清单编制的指南中首次提出。城市碳排放核算边界界定借鉴该思想&#xff0c;可分为3…

Web开发三层架构

##Controller Service Dao(mapper) 软件设计&#xff1a;高内聚 低耦合 Controller 调用Service&#xff0c; Service调用 DAO 模块之间耦合 如果要从EmpServiceA切换到EmpServiceB&#xff0c;Controller代码也要修改 new EmpServiceB 分层接耦 容器中放EmpServiceA&am…

(深度估计学习)Win11复现DepthFM

目录 1. 系统配置2. 拉取代码&#xff0c;配置环境3.开始深度预测4.运行结果 论文链接&#xff1a;https://depthfm.github.io/ 讲解链接&#xff1a;https://www.php.cn/faq/734404.html 1. 系统配置 本人系统&#xff1a;Win11 CUDA12.2 python3.11.5 这里附上几个CUDA安装链…

Linux第四节--常见的指令介绍集合(持续更新中)

点赞关注不迷路&#xff01;本节涉及初识Linux第四节&#xff0c;主要为常见的几条指令介绍。 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1f44d;&#x1f3fb; 收藏 ✨ 加关注&#x1f440; 期待与你共同进步! 1. more指令 语法&#xff1a;more [选项][文件]…

【数据可视化01】matplotlib实例介绍4之六边形分箱图

目录 一、引言二、实例介绍 一、引言 hexbin是一个二维直方图&#xff0c;其中箱子是六边形&#xff0c;颜色表示每个箱子内的数据点数。 二、实例介绍 import matplotlib.pyplot as plt import numpy as np# Fixing random state for reproducibility np.random.seed(19680…