jdk8新特性:函数式接口与函数式编程思想,lambda

//函数式接口:有且仅有一个抽象方法的接口(可以有其他类型方法),
        //            适用于函数式编程--》lamdba表达式
        //    语法糖:指更加方便但是底层原理不变的代码语法(for-each为迭代器的语法)
        //    lamdba表达式可以“当作”匿名内部类的语法糖,但是其实原理不同, lamdba表达式不会创建.class文件
        //                                                而匿名内部类是内部类的一种,其使用会创建.class文件
        //    定义:注解@FunctionalInterface
        //    使用:作为方法的参数与返回值类型(用 接口实现类,匿名内部类,lamdba表达式 传参)
        //    应用:性能浪费的日志事例 问题:方法参数先拼接 字符串后调用方法 如果不满足条件,不打印,还是会先拼接  还是会拼接【浪费】
        //        解决:用lamdba表达式的延迟加载 定义一个拼接的抽象方法(函数式接口中)
        //    lamdba表达式使用前提:必须有函数式接口 Lanmdba表达式的省略中 return关键字省略,其后面return的内容可以不省略
        //    Runnable/Comparator都是函数式接口
        //        一个方法返回值是comparator或comparable接口,其就可以作为sort等方法的比较器 返回值是其他接口也一样类比
        //                是同接口效果一样的;    方法中对于接口抽象方法的重写可以使用匿名内部类/拉美的吧表达式等简写代码
        
        //    使用函数式接口的方法一般参数类型是 函数式接口+要处理的数据的类型 返回值是自己想要得到的返回值类型
        //                            (一般是对于函数式接口的抽象方法返回值类型 或 对其在方法内操作后的类型)
        //    常用的函数式接口:java.until.Function包中
        //        为什么用函数式接口:设计时笼统设计,将方法的实现由定义转到传参调用时,并且调用时可以使用方法外的东西(用lamdba表达式)
        //        为什么用函数式接口:好处是你不用单独为了一小段代码再撰写一个类
        //            (当然函数式接口使用过的是匿名内部类,本质上也是创建了类的,只不过不用撰写类放在项目目录下),
        //            这样可以提高开发效率,当然可读性比直接撰写了差一些
        //        Supplier<T> 仅包含一个无参抽象方法 T get()          【生产型接口】 用于生产指定类型的数据
        //                        应用:获取int数组的最大值并返回
        //        Consumer<T> 仅包含一个抽象方法 void accept(T t) 【消费(使用)型接口】 用于对传来的数据进行消费(使用),有输出,反转等
        //                    默认方法 default Consumer<T> andThen(Comsumer after) 组合两个/多个Consumer对象,再进行消费
        //                                con1.andThen(con2).accept(。。)   谁在前,谁就先消费
        //                        应用 :格式打印  姓名:xxx。年龄:xxx。
        //        Predicate<T> 仅包含一个抽象方法 boolean test(T t)【判断校验型接口】 对某种数据进行判断,看其是否符合某些要求
        //                    默认方法 and 方法使用同andThen 逻辑与 底层与使用同 &&逻辑运算符
        //                           or方法《==》 ||逻辑运算符
        //                           negat方法《==》 !逻辑运算符
        //                        应用:对姓名+性别的字符串进行筛选 满足必须为女且姓名为4个字 加入arraylist集合中返回
        //        Function<T,R>仅包含一个抽象方法 R apply(T t)【转换型接口】 用来将一个类型的数据操作转换为另一类型数据
        //                    默认方法:andThen方法
        //                    应用:将String转为Integer 转化后加10 再转为String类型
        //                        用Function接口进行函数模型的拼接 对于一个包含姓名年龄的字符串进行  
        //                            截取年龄字符串《String,String》 将字符串转为int《String,Integer》 int加100《Integer,Integer》

//lambda表达式衍生物 Stream<T>流
        //    应用:将集合/数组转为Stream流 解决集合/数组的弊端
        //        将集合的循环遍历优化,遍历是每一个输出,循环是输出从头到尾的输出方式
        //    原理:JDK1.8后才有,函数式编程思想,关注做什么,而不是怎么做 底层是队列
        //    使用:Stream流不会存储,相当于工厂流水线 ,
        //        而且有lambda表达式的延迟执行,只有最后一部分结束,其才会执行整个流程
        //    特征:1 pipelinig   中间操作返回都还是这个流
        //        2 内部迭代    流可以直接在内部调用遍历方法 不同于使用for循环的外部迭代
        
        //    Stream<T>接口 java.until.stream包中,不是函数式接口 不加泛型默认object类型,下面的转换不能用其子类的特有方法
        //                                                    可能会出问题,所以最好加上泛型
        //                    静态方法     of方法与concat方法 用时不要加上泛型
        //        获取流:Collection集合都可以使用接口默认方法 stream获取
        //              用stream接口的静态方法 of 获取    
        //              Map可以转为(keyset键,values值,entryset键值对映射关系) set集合获取
        //              数组用of方法获取
        //        方法:    延迟方法:返回自身 可链式编程
        //                终结方法,返回其他  终结方法不能用多个
        //            遍历方法:void foreach(Consumer con)终结方法,用于遍历流中数据
        //            过滤方法:stream filter(Predicate pr)延迟方法,保留Predicate中抽象方法返回true的数据
        //            映射方法:stream map(Function fc) 延迟方法 将流中数据类型改变返回
        //            统计个数:long count() 终结方法 统计元素个数 
        //            取前n个: stream limit (long n) 延迟方法 将当前集合取前n个 一共没有取得多,会返回所有元素
        //            跳过前n个:stream skip(long n) 跳过长度大于等于流中数据长度,返回空流
        //            组合流数据:静态方法:static stream concat(stream a,stream b) 合并两个流 注意不能合并被用过的流
        //    特点:stream属于管道流,只能被消费(使用)一次 stream用延迟方法传给一个新的stream流,旧的就会被关闭,不能再用了
            
        //方法的引用:是对于lambda表达式的简化 ::双冒号是引用运算符
        //    使用:lambda表达式的方法体调用的方法,存在于某一对象中,可用方法引用再次简化    
        //            注意lambda传递的参数一定要是方法引用 引用的那个方法可以接收的类型,否则会抛出异常
        //    引用:lambda表达式的重写方法中
        //        通过对象名引用成员方法(应用类中)
        //        通过super引用父类成员方法(子类中)
        //        通过类名引用静态成员方法(应用类中)
        //        通过this引用本类成员方法(注意这个不能在静态方法中使用,因为静态不能用this)
        //        类的构造器(构造方法)引用:   类名称::new    应用:数组的构造器引用
        

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

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

相关文章

Java实现PDF转word的办法

java实现pdf转word的办法有&#xff1a; 1、pdfbox poi 2、free spire.pdf 3、aspose-pdf free spire.pdf 的效果比aspose-pdf稍差一些&#xff0c;但是 aspose-pdf 是付费的&#xff0c;spire.pdf也有付费版本

github问题解决(持续更新中)

1、ssh: connect to host github.com port 22: Connection refused 从.ssh文件夹中新建文件名为config&#xff0c;内容为&#xff1a; Host github.com Hostname ssh.github.com Port 4432、解决 git 多用户提交切换问题 使用系统命令ssh创建rsa公私秘钥 C:\Users\fyp01&g…

openCv颜色矩

颜色矩&#xff08;Color Moments&#xff09;是一种常用的图像特征描述方法&#xff0c;用于表示图像中颜色的分布和统计特征。它是基于图像的颜色直方图而计算得到的。 颜色矩通常包括三个维度&#xff1a;平均值、方差和偏度。具体来说&#xff1a; 平均值&#xff08;Mean…

zabbix配置snmp trap--使用snmptrapd和Bash接收器(缺zabbix_trap_handler.sh文中自取)--图文教程

1.前言 我的zabbix的版本是5.0版本&#xff0c;5.0的官方文档没有使用bash接收器的示例&#xff0c;6.0的官方文档有使用bash接收器的示例&#xff0c;但是&#xff0c;下载文件的链接失效&#xff1f;&#xff01; 这里讲解zabbix-server端配置和zabbix web端配置 2.zabbix-…

[oeasy]python0002_终端_CLI_GUI_编程环境_游戏_真实_元宇宙

回忆 上次 了解了 python 语言的特点 历史悠久功能强大深受好评已成趋势 3大主流操作系统 macwindowslinux 我们 选择 linux 作为基础系统 为什么选择 黑乎乎的命令行界面呢&#xff1f;&#x1f914; GUI vs CLI 个人电脑 用图标和菜单组成 图形界面(GUI) Graphic User I…

三十五、Seata的基本架构、部署TC服务、微服务集成Seata

目录 一、基本架构 1、Seata事务中的三个重要角色 2、四种不同的分布式事务解决方案&#xff1a; 二、TC的部署 三、微服务集成Seata 1、引入Seata相关依赖 2、配置yml文件 3、启动服务 一、基本架构 Seata是 2019 年 1 月份蚂蚁金服和阿里巴巴共同开源的分布式事务解决…

STM32-OLED显示屏

*本文采用的OLED显示屏为4针脚IIC显示屏&#xff0c;4针脚分别为GND&#xff0c;VCC&#xff0c;SCL&#xff0c;SDA OLED.C #include "stm32f10x.h" #include "OLED_Font.h"/*引脚配置*/ #define OLED_W_SCL(x) GPIO_WriteBit(GPIOB, GPIO_Pin_8, (BitAc…

力扣7.整数反转

题目描述 代码 自己写的像屎山&#xff0c;虽然能通过&#xff0c;但多了很多不必要的代码。 class Solution {public int reverse(int x) {int count 0;int res 0;//用temp2记录x的正负int temp2 x;if(x < 0){x -x;}int temp x;while(temp ! 0){temp temp / 10;cou…

03 数仓平台 Kafka

kafka概述 定义 Kafka 是一个开源的分布式事件流平台&#xff08;Event Streaming Plantform&#xff09;&#xff0c;主要用于大数据实时领域。本质上是一个分布式的基于发布/订阅模式的消息队列&#xff08;Message Queue&#xff09;。 消息队列 在大数据场景中主要采用…

Kubernetes学习笔记-Part.02 Docker版本

目录 Part.01 Kubernets与docker Part.02 Docker版本 Part.03 Kubernetes原理 Part.04 资源规划 Part.05 基础环境准备 Part.06 Docker安装 Part.07 Harbor搭建 Part.08 K8s环境安装 Part.09 K8s集群构建 Part.10 容器回退 第二章 Docker版本 老旧版本&#xff1a;docker/doc…

无人机管控平台:打破通信限制 助力灾害救援

中国地域广阔&#xff0c;自然灾害频发&#xff0c;时常对通信基础设施造成破坏&#xff0c;传统无人机在紧急救援中受限。为有效解决这一问题&#xff0c;新一代无人机技术与应急通信系统融合形成无人机管控平台&#xff0c;不仅提供了高效的空中监测技术&#xff0c;还配备先…

制作一个RISC-V的操作系统三-编译与链接

文章目录 GCCGCC简介GCC的命令格式gcc -Egcc -cgcc -Sgcc -ggcc -vGCC的主要执行步骤GCC涉及的文件类型针对多个源文件的处理 ELFELF介绍ELF文件格式ELF文件处理相关工具&#xff1a;Binutils&#xff08;binary utility&#xff09;readlelf -hreadelf -S或readelf -SW&#x…

11月推荐阅读的12篇大语言模型相关论文

现在已经是12月了&#xff0c;距离2024年只有一个月了&#xff0c;本文总结了11月的一些比较不错的大语言模型相关论文 System 2 Attention (is something you might need too). https://arxiv.org/abs/2311.11829 一种称为S2A的新注意力方法被开发出来&#xff0c;解决llm…

c语言编程题经典100例——(66~70例)

1,写一个函数&#xff0c;判断一个字符串是否是回文字符串。 下面给出一个用于判断一个字符串是否是回文字符串的demo 函数 #include <stdio.h> #include <string.h> int isPalindrome(char str[]) { int len strlen(str); for (int i 0; i < len / 2;…

【C语言】字符串函数strlen #strcpy #strcmp #strcat #strstr及其模拟实现

在C语言中&#xff0c;有一种特殊的数据类型&#xff0c;即字符串类型。C 并没有专门定义一个字符串类型&#xff0c;这对我们使用字符串造成了一定的麻烦。但是&#xff0c;C标准库<string.h> 中定义了各种字符串函数&#xff0c;这对于我们来说是一件值得庆幸的事情。…

PCL 空间直角坐标系与极坐标系的相互转换(C++详细过程版)

目录 一、算法原理1、空间坐标系转极坐标系2、极坐标系转空间坐标系二、代码实现三、结果展示1、空间坐标系转极坐标系2、极坐标系转空间坐标系本文由CSDN点云侠原创,原文链接。爬虫网站自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不

国内的几款强大的AI智能—AI语言模型

R5Ai智能助手是一款由百度研发的文心一言&#xff0c;它支持gpt4 / gpt-3.5 / claude&#xff0c;也支持AI绘画&#xff0c;每天提供十次免费使用机会&#xff0c;无需魔法。该智能助手具有以下优点&#xff1a;会画画&#xff0c;没有使用次数限制&#xff0c;可以在界面上找到…

动能芯片 | SI3262—高度集成的低功耗SOC芯片 刷卡触摸一体

Si3262是一款高度集成的低功耗SOC芯片&#xff0c;其集成了基于RISC-V核的低功耗MCU和工作在13.56MHz的非接触式读写器模块。 MCU模块具有低功耗、Low Pin Count、宽电压工作范围&#xff0c;集成了13/14/15/16位精度的ADC、LVD、UART、SPI、I2C、TIMER、WUP、IWDG、RTC、TSC等…

JS this指向详解

前述 在了解js中this指向之前先简单的阐述一下脚本执行过程和执行上下文的概念 js脚本执行过程 当js引擎执行脚本代码之前会先进行一个预编译阶段&#xff0c;然后创建全局执行上下文入栈&#xff08;上下文调用栈&#xff09;&#xff0c;然后执行全局代码&#xff0c;执行…

uni-app 微信小程序之自定义navigationBar顶部导航栏

文章目录 1. 实现效果2. App.vue3. pages.json 配置自定义4. 顶部导航栏 使用 微信小程序自定义 navigationBar 顶部导航栏&#xff0c;兼容适配所有机型 1. 实现效果 2. App.vue 在App.vue 中&#xff0c;设置获取的 StatusBar&#xff0c;CustomBar 高度&#xff08;实现适配…