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

  • λ希腊字母表中排序第十一位的字母
  • 避免匿名内部类定义过多,使得代码更加简洁
  • 其实质属于函数式编程的概念
(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{…………}

在这里插入图片描述

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

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

相关文章

AI机器人火了,探讨早就可以帮我们开拓市场的中关村科金语音机器人

近期AI机器人给我们带来了不少惊喜,比如国外 Figuer 联合 OpenAI 做了 Chatgpt 机器人,可以通过对话后推理干活,国内仿生机器人员工也开始量产,看到AI机器人不禁想到会不会替代我们的工作?我们了解到很多机器人厂家的…

【JAVA进阶篇教学】第十一篇:Java中ReentrantLock锁讲解

博主打算从0-1讲解下java进阶篇教学,今天教学第十篇:Java中ReentrantLock锁讲解。 在Java并发编程中,保证多线程环境下的数据安全是至关重要的。ReentrantLock 是Java中用于实现线程安全的一种锁机制。本篇博客将深入介绍 ReentrantLock 的原…

MapReduce代码

WordCount 数据准备: a.txt lxy lxy lxy zhang wsoossj liagn guui liang liagn代码(在idea中创建一个Maven工程): mapper: package com.lxy.mr.wordcount.thi;import org.apache.hadoop.io.LongWritable; import…

ABAP ALSM_EXCEL_TO_INTERNAL_TABLE 导入Excel的几个问题

1、没有办法多页签 2、单元格50个字符限制,每个单元格仅读取50个字符 3、Excel单元格总不能有不可见字符换 eg 回车,换行 # 等否则读取的结果会加上引号

【会议征稿】第四届机器学习与智能系统工程国际学术会议(MLISE 2024, 6/28-30)

第四届机器学习与智能系统工程国际学术会议(MLISE 2024)由珠海科技学院主办,并获得多家高校与研究机构共同支持,将于204年6月28-30日在珠海召开。 MLISE将围绕 “机器学习与智能系统工程” 相关领域,为国内外研究人员与学者提供一…

kafka学习笔记04(小滴课堂)

Kafka的producer生产者发送到Broker分区策略讲解 Kafka核心API模块-producer API讲解实战 代码: ProducerRecord介绍和key的作用 Kafka核心API模块-producerAPI回调函数实战 producer生产者发送指定分区实战 我们设置5个分区。 我们指定分区。 重新指定一个分区&am…

根据后端返回下拉请求地址,前端动态请求拿到下拉数据渲染

完整代码如下&#xff1a; <template> <!-- 资源列表页 --> <div> <div> <i click"$router.go(-1)" style" color: #409eff; cursor: pointer; margin-right: 5px; font-size: 18px; " class"el-icon-back" ><…

【算法】二分查找——二分查找

本节博客详述“二分查找”并且以例子来进行讨论&#xff0c;有需要借鉴即可。 目录 1.二分查找1.1使用前提1.2模板 2.题目3.题解代码示例4.二分查找的一般模板5.总结 1.二分查找 1.1使用前提 使用的条件&#xff1a;数组具有“二段性”&#xff0c;二段性指的是数组可以根据某…

数据库系统概论(个人笔记)(第二部分)

数据库系统概论&#xff08;个人笔记&#xff09; 文章目录 数据库系统概论&#xff08;个人笔记&#xff09;2、关系模型简介2.1 关系数据库的结构2.2 数据库模式2.3 键2.4 模式图2.5 关系查询语言2.6 关系代数 2、关系模型简介 2.1 关系数据库的结构 Structure of Relational…

网络2--MAC地址,IP地址的理解

引入&#xff1a; 每一张主机都会有一张网卡&#xff0c;每一张网卡都有一个48bit位的序列号 当我们的热点被连上&#xff0c;你查看时&#xff0c;就会出现MAC地址&#xff0c;IP地址 那么他们两个是什么呢&#xff1f;&#xff1f;&#xff1f; MAC地址 在同一个局域网中…

【C++】每日一题 17 电话号码的字母组合

给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 可以使用回溯法来解决这个问题。首先定义一个映射关系将数字与字母对应起来…

在js中table表格中进行渲染轮播图

效果图&#xff1a;示例&#xff1a; <!DOCTYPE html> <html> <head><meta charset"utf-8"><title></title><script src"js/jquery-3.6.3.js"></script><style>/* 轮播图 */.basko {width: 100%;h…

51单片机小车制造过程记录

首先感谢B站up主好家伙vcc的资料。 这次小车做出来虽然资料挺全的&#xff0c;但中间还是犯了很多不该犯的错误。 第一个&#xff0c;物料这次我们搞错了挺多&#xff0c;最离谱的应该是最小系统板都错了。 资料里用的stm32f103c8t6&#xff0c;我们开始买成了stm32f103c8t6。…

Qt学习笔记1.3.4 QtCore-Qt资源系统

文章目录 资源收集文件(.qrc)外部二进制资源内编译(compiled-in)资源压缩使用应用程序中的资源使用库中的资源 Qt资源系统是一种 独立于平台的机制&#xff0c;用于在应用程序的可执行文件中存储二进制文件。如果您的应用程序总是需要一组特定的文件(图标、翻译文件等)&#x…

信息与未来2017真题笔记

T1. 龟兔赛跑 题目描述 兔子又来找乌龟赛跑啦&#xff01;同样的错误兔子不会犯两次&#xff0c;所以兔子提出赛跑的时候&#xff0c;乌龟就觉得这场比赛很不公平。于是兔子进一步放宽了条件&#xff0c;表示他可以在比赛开始以后先睡 t t t 分钟再开始追乌龟。 乌龟这下没…

java+jsp+sql server 医院住院管理系统论文(二)

⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️ ➡️点击免费下载全套资料:源码、数据库、部署教程、论文、答辩ppt一条龙服务 ➡️有部署问题可私信联系 ⬆️⬆️⬆️​​​​​​​⬆️…

TikTok起号的八大技巧分享

国内的传统生意都是可以在抖音上做&#xff0c;那么也可以在TikTok 上重新做一遍。那该如何才能把握住这片巨大的蓝海&#xff0c;TikTok 账号的运营就成为了主要的关键了&#xff0c;对于TikTok账号运营的八大秘籍&#xff0c;大家一起看看是如何做的&#xff1f; 一、固定节…

机器视觉运动控制一体机在点胶胶路检测上的应用

市场应用背景 点胶通过使用不同类型的粘合剂&#xff0c;实现产品的密封、绝缘、导热和耐腐蚀等作用&#xff0c;广泛应用于各种产品的制造。在点胶加工生产中&#xff0c;通过检测胶水的宽度、点胶位置和胶路连续性等&#xff0c;可确保产品性能的可靠性和稳定性。 在现实生…

骨传导耳机哪个品牌值得入手?盘点5款高人气热门机型推荐!

随着人们对健康生活方式的追求和户外运动的普及&#xff0c;骨传导耳机的需求也日益增长。然而&#xff0c;随着骨传导耳机的热度增加&#xff0c;市场上也开始出现一些低质量的骨传导耳机产品&#xff0c;这些劣质耳机在音质、佩戴舒适度或安全性上存在各种不足&#xff0c;甚…

Dubbo全局处理业务异常 (自定义dubbo异常过滤器)

自定义dubbo异常过滤器 一、前置问题介绍&#xff1a;问题一问题二 二、Dubbo的异常过滤器源码如下&#xff1a;三、实现方案 - 重写Dubbo的Filter异常过滤器至此&#xff0c;Dubbo自定义异常过滤器已完结&#xff01; 一、前置问题介绍&#xff1a; 问题一 在dubbo框架中&am…