函数式编程

函数式编程

函数式编程思想:对方法中的数据进行了什么操作

优点:代码简介、便于理解、易于并发编程

1.Lambda表达式

JDK8中的语法糖,可以对某些匿名内部类的写法进行简化
使用条件:匿名内部类是一个接口,并且接口只有一个抽象方法
核心原则:可推导可省略
基本格式
(参数列表)->{代码}
案例一

//未使用lambdanew Thread(new Runnable() {@Overridepublic void run() {System.out.println("第一个线程启动了");}}).start();
//使用lambdanew Thread(()->{System.out.println("第二个线程启动了"); }).start();}

案例二
选中接口类,alt+enter,可进行匿名内部类与lambda表达式的转换

//自定义方法,方法参数为抽象接口,且只有一个接口方法public static int calculateNum(IntBinaryOperator operator){int a=10;int b=20;return operator.applyAsInt(a,b);}
//未进行lambda表达式int i = calculateNum(new IntBinaryOperator() {@Overridepublic int applyAsInt(int left, int right) {return left + right;}});System.out.println(i);
//lambda表达式int i = calculateNum((int left, int right) -> {return left + right;});System.out.println(i);

案例三

public class Main {public static void main(String[] args) {foreachArr((int abc)->{System.out.println(abc);});}public static void foreachArr(IntConsumer intConsumer){int[] arr={1,2,3,4,5,6,7,8,9,10};for (int i:arr) {intConsumer.accept(i);}}
}

终结:使用lambda表达式的时候,需要关注的是抽象类中的抽象方法参数与方法体
在这里插入图片描述
Lambda表达式省略机制:
1.参数类型可省略
2.方法体只有一句代码时大括号return和唯一一句代码的分号可省略
3.方法只有一个参数时,小括号可以省略

2.Stream流

可以将数组或集合进行链状流式的操作不同于io流

//去重distinct()
//过滤filter()
//foreach遍历List<Author> authors = test();authors.stream().distinct().filter(new Predicate<Author>() {@Overridepublic boolean test(Author author) {return author.getAge() > 18;}}).forEach(new Consumer<Author>() {@Overridepublic void accept(Author author) {System.out.println(author.getName());}});
//lambda表达式List<Author> authors = test();authors.stream().distinct().filter(author -> author.getAge() > 18).forEach(author -> System.out.println(author.getName()));                    }

stream的常见操作
一.创建流
1.单列集合:集合对象.stream()
2.数组:Arrays.stream(数组)或者使用Stream.of
3.双列集合:转换成单列集合后在创建
在这里插入图片描述
二.中间操作
1.filter,过滤
2.map,可以把流中的元素进行计算或转换
在这里插入图片描述
在这里插入图片描述
3.distinct,除去重复项
4.sorted,排序
在这里插入图片描述
如果使用的是空参的sorted方法,需要流中的元素实现了Comparable

4.limit,设置流的最大长度,超出的部分抛弃
例如:取排行榜的前三名
5.skip,跳过流中的n个元素,返回剩下的元素
6.flatMap
在这里插入图片描述
三.终结操作
1.foreach,对流中的元素进行遍历
2.count,统计数量
3.max&min,获取最值
4.collect,把流转换成集合

set集合
在这里插入图片描述
list集合
在这里插入图片描述
map集合,key值需要去重
在这里插入图片描述
5.查找与匹配,用来判断是否有符合匹配条件的元素,结果boolean
anyMatch,任何符合条件的
allMatch,都符合条件
noneMatch,没有符合条件的
findAny,获取流中的任意一个元素

//由于是随机取数,使用findAny方法返回值可能为空,

使用findAny进行匹配,如果有值则输出,没有值则无操作
在这里插入图片描述
findFirst,查找第一个元素

6.reduce归并
将stream流中的数据进行归并,即遍历处理流中的数据
案例一
在这里插入图片描述
案例二在这里插入图片描述
Stream流的注意事项
1.没有终结操作,不会执行语句
2.流是一次性的,一旦进行终结操作,这个流就不能再用了
3.正常情况下,在流中处理数据不会影响原数据

在这里插入图片描述

3.并行流

parallel()
将串行流改为并行流,多个线程一同处理数据,提高工作效率,减少耗时

4.函数式接口

概述:只有一个抽象方法的接口
如果想要自定义函数式接口,需要在接口类上方添加@FunctionalInterface注解
在这里插入图片描述

5.Optional

检验和避免出现空指针异常
1.Optional对象的创建Optional.ofNullable()
在这里插入图片描述
2.安全消费值,即不报空指针错误
ifPresent()
在这里插入图片描述
orElseGet()
在这里插入图片描述
orElseThrow
在这里插入图片描述
3.数据过滤
filter
在这里插入图片描述
4.判断
在这里插入图片描述
5.数据转换
map
在这里插入图片描述

6.方法引用

作用:使用lambda表达式的时候,对表达式进行简化
使用条件:方法体中只有一个方法的调用,包含构造方法,我们可以对代码进行进一步简化
格式=类名或对象名::方法名,可以使用alt+enter进行快捷简化
在这里插入图片描述

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

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

相关文章

GraphScope,开源图数据分析引擎的领航者

文章首发地址 GraphScope是一个开源的大规模图数据分析引擎&#xff0c;由Aliyun、阿里巴巴集团和华为公司共同开发。GraphScope旨在为大规模图数据处理和分析提供高性能、高效率的解决方案。 Github地址&#xff1a; https://github.com/alibaba/GraphScope GraphScope 的重…

【电商领域】Axure在线购物商城小程序原型图,抖音商城垂直电商APP原型

作品概况 页面数量&#xff1a;共 60 页 兼容软件&#xff1a;Axure RP 9/10&#xff0c;不支持低版本 应用领域&#xff1a;网上商城、品牌自营商城、商城模块插件 作品申明&#xff1a;页面内容仅用于功能演示&#xff0c;无实际功能 作品特色 本作品为品牌自营网上商城…

logstash配置文件

input { kafka { topics > “xxxx” bootstrap_servers > “ip:port” auto_offset_reset > “xxxx” group_id > “xxxx” consumer_threads > 3 codec > “json” } } filter { grok { match > { “message” > ‘%{IP:client_ip} - - [%{HTTPDATE:…

线性代数的学习和整理---番外1:EXCEL里角度,弧度,三角函数

目录 1 角的度量&#xff1a;角度和弧度 1.1 角度 angle 1.1.1 定义 1.1.2 公式 1.1.2 角度取值范围 1.2 弧长和弦长 1.3 弧度 rad 1.3.1 弧长和弧度定义的原理 1.3.2 定义 1.3.3 取值范围 1.3.4 取值范围 1.4 角度&#xff0c;弧度的换算 1.5 EXCEL里进行角度和…

STL list基本用法

目录 list的使用构造函数和赋值重载迭代器(最重要)容量相关插入删除元素操作reversesortuniqueremovesplice list的底层实际是双向链表结构 list的使用 构造函数和赋值重载 构造函数说明list()无参构造list (size_type n, const value_type& val value_type())构造的li…

安全学习DAY18_信息打点-APP资产搜集

信息打点-APP资产&静态提取&动态抓包&动态调试 文章目录 信息打点-APP资产&静态提取&动态抓包&动态调试本节知识&思维导图本节使用到的链接&工具 如何获取目标APP从名称中获取APP从URL获取APP APP搜集资产信息APP提取信息分类信息提取方式信息…

怎么管理运营私域流量?

私域流量管理是当今企业运营的重要议题&#xff0c;对于企业发展和品牌建设具有不可忽视的作用。然而&#xff0c;管理私域流量并不是一项轻松的任务&#xff0c;需要我们采取科学有效的措施&#xff0c;才能取得良好的效果。 首先&#xff0c;私域流量管理需要建立清晰的目标。…

Linux系统安全——NAT(SNAT、DNAT)

目录 NAT SNAT SNAT实际操作 DNAT DNAT实际操作 NAT NAT: network address translation&#xff0c;支持PREROUTING&#xff0c;INPUT&#xff0c;OUTPUT&#xff0c;POSTROUTING四个链 请求报文&#xff1a;修改源/目标IP&#xff0c; 响应报文&#xff1a;修改源/目标…

HTTP 握手过程

HTTP 握手过程 TCP 建立连接 3 次握手 客户端请求连接服务器服务器响应成功客户端回应服务器准备开始连接 TCP 结束连接 4 次挥手 客户端向服务器发送&#xff0c;断开请求服务器向客户端发送&#xff0c;还有数据没有传输完毕&#xff0c;请稍等服务器向客户端发送&#x…

基于微信小程序的中医体质辨识文体活动的设计与实现(Java+spring boot+MySQL)

获取源码或者论文请私信博主 演示视频&#xff1a; 基于微信小程序的中医体质辨识文体活动的设计与实现&#xff08;Javaspring bootMySQL&#xff09; 使用技术&#xff1a; 前端&#xff1a;html css javascript jQuery ajax thymeleaf 微信小程序 后端&#xff1a;Java s…

解决Pandas KeyError: “None of [Index([...])] are in the [columns]“问题

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

java八股文面试[JVM]——JVM参数

参考&#xff1a;JVM学习笔记&#xff08;一&#xff09;_卷心菜不卷Iris的博客-CSDN博客 堆参数调优入门 jdk1.7&#xff1a; jdk1.8&#xff1a; 面试题&#xff1a;给定-Xms Xmx -Xmn 问 最大的eden区域是多少M。 常用JVM参数 怎么对jvm进行调优&#xff1f;通过参数配…

百度商业AI 技术创新大赛赛道二:AIGC推理性能优化TOP10之经验分享

朋友们&#xff0c;AIGC性能优化大赛已经结束了&#xff0c;看新闻很多队员已经完成了答辩和领奖环节&#xff0c;我根据内幕人了解到&#xff0c;比赛的最终代码及结果是不会分享出来的&#xff0c;因为办比赛的目的就是吸引最优秀的代码然后给公司节省自己开发的成本&#xf…

怎样做好数字营销呢?

2023 年&#xff0c;数字营销将随着新技术、趋势和消费者行为的不断发展而不断发展。要在 2023 年在数字营销领域取得成功&#xff0c;请考虑以下策略&#xff1a; 1.内容质量和个性化&#xff1a; 专注于制作与目标受众产生共鸣的高质量且相关的内容。 根据用户偏好、行为和…

k8s ingress (二)

k8s ingress (二) Ingress介绍 在前面课程中已经提到&#xff0c;Service对集群之外暴露服务的主要方式有两种&#xff1a;NodePort和LoadBalancer&#xff0c;但是这两种方式&#xff0c;都有一定的缺点&#xff1a; NodePort方式的缺点是会占用很多集群机器的端口&#xff0…

【高危】Apache Airflow Spark Provider 任意文件读取漏洞 (CVE-2023-40272)

漏洞描述 Apache Airflow Spark Provider是Apache Airflow项目的一个插件&#xff0c;用于在Airflow中管理和调度Apache Spark作业。 受影响版本中&#xff0c;在JDBC连接时&#xff0c;由于没有对conn_prefix参数做验证&#xff0c;允许输入"?"来指定参数。攻击者…

2023 网络建设与运维 X86架构计算机操作系统安装与管理题解

任务描述: 随着信息技术的快速发展,集团计划2023年把部分业务由原有的X86架构服务器上迁移到ARM架构服务器上,同时根据目前的部分业务需求进行了部分调整和优化。 一、X86架构计算机操作系统安装与管理 1.PC1系统为ubuntu-desktop-amd64系统(已安装,语言为英文),登录用户…

Java调用高德地图API根据详细地址获取经纬度

步骤一&#xff1a;注册高德开发者账号并创建应用 访问高德开放平台https://lbs.amap.com/ 登录后&#xff0c;在控制台中创建一个应用&#xff0c;获取生成的应用key。这个key将用于访问高德地图API。 步骤二&#xff1a;使用Java发送HTTP请求获取经纬度 您可以使用Java…

kafka-python 消费者消费不到消息

排除步骤1&#xff1a; 使用group_id”consumer_group_id_001“ 和 auto_offset_reset"earliest" from kafka import KafkaConsumerconsumer KafkaConsumer(bootstrap_servers["dev-kafka01.test.xxx.cloud:9092"],enable_auto_commitTrue, auto_commit…

什么是雨量气象站?

过多的强降水会造成重大自然灾害&#xff0c;给我们的生活带来很大影响&#xff0c;实时监测降雨信息&#xff0c;能够及时发布气象预警&#xff0c;防范可能因强降水引起的山洪、泥石流等自然灾害&#xff0c;保护人民群众生命财产安全&#xff0c;提高防灾减灾能力。 雨量气…