【Java进阶】java函数式编程的使用

Java8 函数式编程 Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来对 Java 集合运算和表达的高阶抽象。Stream API 可以极大提高 Java 程序员的生产力,让程序员写出高效率、干净、简洁的代码。这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 变换,聚合等。 阅读详情

 

目录

1.目前Java中自带的函数式编程接口

2.java中使用函数式编程的案例

 3.自定义函数式接口

 4.自定义函数式接口的实现


 

简单一句话理解函数式编程,传统的方法调用我们都是传递参数,而函数式编程,传递的则是方法实现的过程。

1.目前Java中自带的函数式编程接口

1.线程类型

接口名返回值/方法/参数含义
Runnablevoid run()定义多线程方法内容
Callable<V>V call()有返回值的多线程方法

2.有参/无返回值 类型

接口名返回值/方法/参数含义
Consumer<T>void accept(T t)接收一个参数,不返回值
BiConsumer<T,U>

void accept(T t,U u)

接收两个参数,不返回值
ObjIntConsumer<T>void accept(T t,int value)接收一个泛型参数和一个整形参数,不返回值
ObjDoubleConsumer<T>void accept(T t,double value)接收一个泛型参数和一个双精度小数类型参数,不返回值
ObjLongConsumer<T>void accept(T t,Long value)接收一个泛型参数和一个长整型的参数,不返回值

3.无参/有返回值 类型

接口名返回值/方法/参数含义
Supplier<T>T get()不接受参数,返回一个泛型的参数
BooleanSupplierboolean getAsBoolean()不接受参数,返回一个布尔参数
还有很多,不一一列举了......

4.有参/有返回值 类型

接口名返回值/方法/参数含义
Function<T, R>R apply(T t)接收一个参数,返回另一种参数
Predicate<T>boolean test(T t)接收一个参数,返回一个布尔值
这里也还有很多,就不一一列举了.....

还有很多的函数式接口,具体可以参考java.util.function包下的内容

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASmVmZkhhbl5fXg==,size_13,color_FFFFFF,t_70,g_se,x_16

2.java中使用函数式编程的案例

1.ArrayList中的forEach方法

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASmVmZkhhbl5fXg==,size_20,color_FFFFFF,t_70,g_se,x_16

 使用一下这个方法看看

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASmVmZkhhbl5fXg==,size_18,color_FFFFFF,t_70,g_se,x_16

 打印结果:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASmVmZkhhbl5fXg==,size_13,color_FFFFFF,t_70,g_se,x_16

 这里的意思其实就是上面所说的,我们不是像传统的方法传递的是参数,传递的是一种方法的实现。从forEach的方法中不难看出,他是将List中的每一个元素放入accept的方法中的,而我们告诉了Consumer要去打印传入的每个参数。

2.再比如ArrayList中的replaceAll这个方法

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASmVmZkhhbl5fXg==,size_20,color_FFFFFF,t_70,g_se,x_16

 可以看到,这里的逻辑是将List中的值经过变换,在赋给原来的引用,所以我们传入的实现就是改变的规则,如下:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASmVmZkhhbl5fXg==,size_20,color_FFFFFF,t_70,g_se,x_16

结果:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASmVmZkhhbl5fXg==,size_13,color_FFFFFF,t_70,g_se,x_16

3.Stream流

在Java.util.stream.Stream类下,我们可以看到大部分的方法都是用函数式编程实现的。

  • Stream<T> filter(Predicate<? super T> predicate)
  • <R> Stream<R> map(Function<? super T, ? extends R> mapper)
  • IntStream mapToInt(ToIntFunction<? super T> mapper)
  • LongStream mapToLong(ToLongFunction<? super T> mapper)

简单的实现:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASmVmZkhhbl5fXg==,size_20,color_FFFFFF,t_70,g_se,x_16

这里通过少量的代码直接实现了对列表中所有的数字加10,过滤大于14的值,并组成一个新的List,并打印出来,我们来看看结果:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASmVmZkhhbl5fXg==,size_13,color_FFFFFF,t_70,g_se,x_16

 3.自定义函数式接口

自定义函数式接口需要满足个规则:

1.类型必须是接口。

2.接口里有且仅有一个抽象方法。

3.使用@FunctionalInterface标注接口。

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASmVmZkhhbl5fXg==,size_12,color_FFFFFF,t_70,g_se,x_16

 4.自定义函数式接口的实现

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASmVmZkhhbl5fXg==,size_20,color_FFFFFF,t_70,g_se,x_16

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASmVmZkhhbl5fXg==,size_13,color_FFFFFF,t_70,g_se,x_16

当然,java提供的函数式接口,已经基本满足日常开发的需求了,合理的利用函数式编程,可以统一团队的开发规范,提高代码可读性,简化代码。

 

 

 

 

图的一些基本知识:图,邻居,度矩阵,邻接矩阵 目录前言图(graph)邻居(neighborhood)度矩阵(degree)邻接矩阵(adjacency)参考文献 前言       本文介绍了一些图论的基础知识,包括图的表示、邻接矩阵、度矩阵等(边不带权值的情况),本文中某些图片或者知识的参考/来源已列于本文最后。 图(graph)       图用G=(V, E)表示,V中元素为... 阅读详情

相关推荐

PL端:HDMI 输出实验

开发板没有HDMI编码芯片,是将FPGA的3.3差分IO直接连接到HDMI连接器,FPGA 完成 24 位 RGB 编码输出TMDS 差分信号。1、学会使用第三点IP核,首先是添加,后面的使用和自带IP核操作一致。2、主要还是在梳理vivado使用流程。

qq_43441284的博客 4287

Java函数式编程

函数式接口:有且仅有一个抽象方法的接口Java 中的函数式编程体现就是 Lambda 表达式,所以函数式接口就是可以适用于 Lambda 使用的接口只有确保接口中有且仅有一个抽象方法,Java 中的 Lambda 才能顺利地进行推导如何检测一个接口是不是函数式接口呢?放在接口定义的上方:如果接口是函数式接口,编译通过;如果不是,编译失败。

qq_49487356的博客 9414

长短期记忆网络(Long Short-Term Memory networks, LSTM)

如何简单的理解LSTM——其实没有那么复杂:

weixin_39910711的博客 2万+

Java 函数式编程

在 Java 8 之前,Java 是没有很明确的函数式编程这么一说的,那之前的 Java 代码都是类、方法等组成的,若想要实现一个很简单的功能往往要写上很多代码,这就非常地不方便。于是,在 Java 8 中更新了一系列与函数式编程相关的内容,比如 Lambda 表达式(新增)、函数式接口(强化),以及配合函数式接口使用的 Stream 流(新增)等。而 Java 中函数式编程的典型代表就是 Lambda 表达式了。函数式接口本质上还是接口,只不过它比较特殊,它有且仅有一个抽象方法。

小康2022的博客 2255

别再搞混了!用示波器实测SVPWM:相电压、线电压、端电压波形到底长啥样?(附TI/ST官方笔记解读)

本文详细解析了SVPWM波形实测中的相电压、线电压和端电压的区别与测量技巧,结合TI/ST官方笔记,揭示了马鞍形波形的形成原理及常见误区。通过示波器实测案例,帮助电力电子工程师准确理解并应用这些关键概念,提升电机控制系统的调试效率。

weixin_30632883的博客 431

修复zookeeper未授权访问漏洞

【代码】修复zookeeper未授权访问漏洞。

qq_28392947的博客 4067

Java学习——函数式编程

Java学习笔记——函数式编程

weixin_44456914的博客 3859

iqoo11如何获取root权限?

🏆本文收录于专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家!持续更新中,up!up!up!!

**My Coding Family** 5811

java -- 函数式编程

函数式编程

weixin_44966435的博客 1221

ARM6818嵌入式视频播放器:硬解加速与Framebuffer渲染实战

嵌入式Linux音视频系统是智能座舱、工业HMI等场景的核心能力,其本质是软硬协同的实时多媒体处理系统。原理上需打通内核驱动(如VPU硬件编解码、FIMD多图层合成)、用户空间框架(GStreamer pipeline定制、SDL2硬件渲染)与应用层同步机制(PTS/HTS双时钟校准)。技术价值在于显著降低CPU负载(硬解可压至15%以下)、提升启动速度(<1.2s首帧)并保障音画同步精度(±3ms级)。典型应用场景包括车载信息娱乐、边缘AI终端及无X11的工控显示设备。本文基于ARM6818平台,深入VP

weixin_32456485的博客 77

基于LLM的电商数据分析系统

随着电商行业的蓬勃发展,每天都会产生海量的数据,这些数据包含了用户的行为信息、商品信息、销售数据等。如何从这些繁杂的数据中提取有价值的信息,为电商企业的决策提供支持,成为了一个关键问题。基于LLM的电商数据分析系统的目的就是利用大语言模型强大的自然语言处理和数据分析能力,对电商数据进行深入挖掘和分析,帮助企业了解市场趋势、用户需求、商品销售情况等,从而制定更加合理的营销策略、优化商品库存管理、提升用户体验等。本系统的范围涵盖了电商领域的多个方面,包括用户行为分析、商品分析、销售数据分析等。

AI Python 编程之道的博客 808

JAVA基础 函数式编程

仅为个人学习使用。

,,,,,,, 3903

帆软报表导出各种格式之后台导出

我们前面介绍了帆软报表在界面上的导出是通过类似的URL:http://localhost:8075/webroot/decision/view/report?op=export&sessionID=10653244-3e46-408c-bc54-f89a214a9bc7&format=image&extype=PNG 来完成的,就是带OP=export以及format参数来完成的。如果不从界面传参数,比如我们自己实现了一个HTTP接口,也可以通过传参数format来完成各种格式的导

帆软爱好者的专栏 4270

Java进阶使用记录

title: Java进阶使用记录 date: 2022-03-09 00:26:17 tags: Java categories: Java cover: https://cover.png feature: true 1. Asset 断言 用于对值进行判断,为真则运行,否则报错,多用于调试 Assert.isNull(null, "是否为空"); // 为空则运行 Assert.notNull("", "是否不为空"); // 不为空则运行 Assert.notEmpty(new ArrayL.

凡的博客 2791

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Java进阶之函数式编程Predicate:用法实例(二百五十六)

本篇目的:Java进阶之函数式编程Predicate:用法实例基本概念Predicate是Java 8核心函数式接口,表示接收参数T并返回boolean的断言函数,用于过滤、校验、条件判断等场景。功能提供test、and、or、negate、isEqual方法;可链式组合;支持泛型边界;配合Stream.filter、Optional.filter使用。使用限制不能抛出受检异常;链式组合注意短路逻辑;并行流需线程安全;避免副作用。性能特性Lambda内联执行;链式组合生成新Predicate实例;

Android系统攻城狮 1166

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java Lambda表达式与函数式编程指南

Java函数式编程核心指南:从Lambda表达式入门到实战应用。详解函数式思想(强调行为而非对象),对比OOP差异。通过线程启动案例展示Lambda简化匿名类的优势,解析标准格式与语法糖规则。重点说明Lambda使用前提(单一抽象方法的函数式接口),并列举JDK内置接口(Runnable、Consumer等)。提供无参/有参、无返回/有返回的完整代码示例,演示排序、方法引用等常见应用场景,帮助开发者编写更简洁高效的代码。

2301_79751930的博客 940

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

04 函数式编程接口Consumer

本节讲述函数式编程接口Consumer 的使用。 Consumer<T>: 数据消费器, 接收一个 T类型的对象,无返回值,通常用于设置T对象的值; 单参数无返回值的行为接口;提供了 accept, andThen 方法; Consumer的源代码: package java.util.function; import java.util.Objects; @Fu...

张力的程序园 236

Java函数式编程(Lambda表达式、Stream流用法)

Lambda是JDK8中的一个语法糖。可以看成是一个语法糖,他可以对某些匿名内部类的写法进行简化。它是函数式编程思想的一个重要体现。让我们不用关注什么是对象。而是更关注我们对数据进行了什么操作......

xikx99的博客 615

Java基础(9)——从匿名内部类 到 函数式编程Lamda表达式 &amp; List的函数式编程案例_匿名内部类转lambda表达式

没有类名----匿名内部类没有类名----匿名内部类。

2401_84253380的博客 963

Java函数式编程详解

Java从1.8以后引入了函数式编程,这是很大的一个改进。函数式编程的优点在提高编码的效率,增强代码的可读性。本文历时两个多月一点点写出来,即作为心得,亦作为交流。 1.Java函数式编程的语法: 使用Consumer作为示例,它是一个函数式接口,包含一个抽象方法accept,这个方法只有输入而无输出也就是说这个方法无返回值。 现在我们要定义一个Consumer接口的实例化对象,传统的方式是...

陈大伟的博客 3万+

Java函数式编程入门

函数式编程在Java中不仅能提高代码的简洁性和可读性,还能在处理数据流、并行计算等场景中发挥重要作用。通过掌握Lambda表达式、Stream API、Optional以及其他相关技术,并结合实际业务场景的应用,你将能够更高效地开发出安全、稳定和可维护的系统。建议在日常项目中逐步引入函数式编程思想,从简单的集合操作开始,逐步探索更多高级特性,并结合代码评审和测试不断完善实践经验。/*** 函数式编程*//*** Function<T, R>:接受T类型的参数,返回R类型的结果。

zjh285077371的专栏 1779

Java进阶之-函数式编程

通过学习 Java 的函数式编程思想,可以大大简化、高效、优雅的去处理我们的代码。熟练的掌握这些用法之后,你的代码档次,b格会提升一个台阶!ps:以下是我整理的java面试资料,感兴趣的可以看看。最后,创作不易,觉得写得不错的可以点点关注!# 《Java知识宝典》

共同学习,共同成长! 1098

java函数式编程

函数式接口是只包含一个抽象方法的接口(不包括Object类中的方法)。这样的接口可以被隐式地转换为Lambda表达式。Stream API 提供了一种高效且易于使用的方式来处理集合(Collection)和数组。Stream操作分为中间操作(Intermediate Operations)和终端操作(Terminal Operations)。方法引用是Lambda表达式的一种简洁写法,它允许你直接引用已存在的方法或构造器。

2401_83447580的博客 1563

Java 中的函数式编程详解

摘要 Java 8 引入函数式编程特性,包括 Lambda 表达式、函数式接口、方法引用和 Stream API,使代码更简洁高效。函数式接口(如 Function、Consumer)是基础,Lambda 表达式简化匿名函数写法,方法引用进一步优化语法。Stream API 支持链式数据操作,结合过滤、映射等中间操作和收集等终端操作,提升数据处理能力。Optional 类帮助避免空指针异常。函数式编程优势包括代码简洁、可读性强和并行处理能力,但也存在性能开销和学习成本。实战示例展示了如何用 Stream 处

2503_92145588的博客 1904
上一篇: 【Docker】Centos7.6和Windows10下安装Docker
下一篇: 【Netty】Netty的使用和原理分析
JeffHan^_^
博客等级 码龄7年 1万+粉丝 134原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JeffHan^_^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值