JDK——java.util.function

JDK——java.util.function

  • 结构总览
    • 1.function
    • 2.predicate
    • 3.supplier
    • 4.consumer
    • 5.operator

最近java.util.function包用到的比较频繁,感觉很好用。系统整理一下,帮助快速回忆

结构总览

function包中的接口可以大致分为以下几种,根据接口名称也可以看出来:

  • function
  • predicate
  • supplier
  • consumer
  • operator

1.function

  • 代表一个函数,接收一个参数,返回一个参数。虽然一个function结构和功能较为单一,但可以通过多个function的组装完成复杂功能。(不禁联想FaaS)
  • 提供了compose andThen identity对function进行再处理的入口
  • BiFunction二元函数,相较于Function接口,可接收两参并返回
public class FunctionTest {@Testpublic void test() {// int 转 strFunction<Integer, String> int2Str = String::valueOf;// 平方Function<String, Integer> square = e -> {int i = Integer.parseInt(e);return i * i;};// 格式输出Function<String, Date> format = e -> new Date();String apply = int2Str.apply(5);// note: apply 实际传入的参数类型取决于compose,这里前置函数需要String类型,所以传入"5"// note: andThen 的函数入参必须是apply的return类型Date apply2 = int2Str.compose(square) // 前置处理: apply执行前,先计算平方.andThen(format) // 后置处理: apply执行后,格式化输出.apply("5"); // 处理System.out.println(apply);System.out.println(apply2); //}// 标记占位,用于拓展@Testpublic void test2() {List<String> names = List.of("Alice", "Bob", "Charlie");// note 定义可扩展的方法,处理逻辑动态传入. 使用Function.identity()进行占位List<String> processedNames = processList(names, Function.identity());System.out.println(processedNames); // 输出: [Alice, Bob, Charlie]}public static <T> List<T> processList(List<T> list, Function<T, T> processor) {List<T> result = new ArrayList<>();for (T item : list) {result.add(processor.apply(item)); // 应用处理函数}return result;}
}

2.predicate

  • 定义判断的函数
  • 如function一样,内部提供了 and or negate,即 与 或 非 逻辑,可以将多个判断进行组装
  • 提供了isEqual not静态工具,可快速返回指定predicate对象
@Test
public void predicate(){// 定义一个predicate:是否是偶数Predicate<Integer> even = integer -> integer % 2 == 0;Assert.assertTrue("input not a even", even.test(6));// and 与上另一个predicate: 输入为偶数 且 大于5Predicate<Integer> and = even.and(input -> input > 5);Assert.assertTrue("input <= 5", and.test(6));// or 或上另一个predicate: 输入为偶数 或 大于10Predicate<Integer> or = even.or(input -> input > 10);Assert.assertTrue("input >= 10", or.test(6));// 取反: 是奇数Predicate<Integer> odd = even.negate();Assert.assertTrue("input not a odd", odd.test(7));// 静态函数:返回当前predicate的取反,内部调用的还是 negatePredicate<Integer> not = Predicate.not(even);Assert.assertTrue("input not a odd", not.test(7));// 静态函数: isEqual 返回一个predicatePredicate<String> equalMsg = Predicate.isEqual("msg");Assert.assertTrue(equalMsg.test("msg1"));
}

3.supplier

  • 通过supplier定义数据来源,使用get返回数据
  • XxSupplierSupplier接口进行了细化,功能类似
// supplier: 定义数据提供者
@Test
public void supplier(){Supplier<List<String>> supplier = () -> {List<String> list = new ArrayList<>();list.add("a");list.add("b");return list;};List<String> result = supplier.get();System.out.println(result);// XxSupplier   getAsXx}

4.consumer

  • Consumer<T>定义单参消费者,仅对入参进行消费处理,不返回
  • BiConsumer<T, U>二元消费者,允许两个入参
@Test
public void biConsumer(){BiConsumer<String, String> biConsumer = (s, s2) -> System.out.println(s + " : " + s2);biConsumer.accept("a", "b");
} 

5.operator

具体的某种操作,可看做是对Function的细化,比如:元操作
UnaryOperator<T> extends Function<T, T>; 再比如其他具体到数据类型的操作,如IntUnaryOperator LongUnaryOperator等。

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

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

相关文章

淘宝api上货软件)一刻工具箱,一天上几万不出现爬虫违规,更新开放类目错放功能,淘宝电商必备软件!

天猫淘宝抖音上货神器&#xff0c;助力电商快速铺货 在当今这个信息爆炸、电商飞速发展的时代&#xff0c;如何快速有效地将产品铺货到各大电商平台&#xff0c;成为每一位电商从业者都需要面对的问题。 通过电商API接口能为电商从业者打造的综合辅助工具&#xff0c;支持天猫、…

E34.【C语言】位段练习题

1.题目 分析下列代码中位段在内存中的排布(已知测试平台为VS2022) struct S {int a : 2;int b : 5;int c : 10;int d : 30; };int main() {struct S s { 0 };return 0; } 有关位段的知识点见64.【C语言】再议结构体(下)文 2.提示 VS满足:由低地址向高地址存储,按浪费空间…

基于大数据技术的宠物商品信息比价及推荐系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

谷歌自曝TPU秘密武器,AlphaChip登Nature!深度解读AI设计芯片的发展历程

2020 年&#xff0c;谷歌发表了一篇具有里程碑意义的预印本论文「Chip Placement with Deep Reinforcement Learning」&#xff0c;首次向世界展示了其采用新型强化学习方法设计的芯片布局。这一创新使得谷歌能够在 TPU 的芯片设计中引入 AI&#xff0c;实现了超越人类设计师的…

node的版本管理工具volta

安装方式 # mac curl https://get.volta.sh | bash # Windows Installation winget install Volta.Volta切换版本 volta install node指定版本根据项目固定node和包管理器版本和 该命令会在package.json生成volta的配置&#xff0c;volta会自动读取项目的该配置来决定node的…

Linux环境下的JDK安装详解

JDK安装 在 一些操作系统上&#xff0c;有时会自带 JDK&#xff08;一般都是自己卸载再重新装一个&#xff09;。您可以通过以下命令检查&#xff1a; ##看看是否有自带的jdk java -version rpm -qa | grep -i java如果已经安装了 JDK&#xff0c;可以卸载后再重新安装。 r…

Parallels Desktop19官方中文版10月最新

如何使用 Parallels Desktop 在 Mac 上运行虚拟机 Parallels Desktop 是一款强大的虚拟机软件&#xff0c;允许 Mac 用户在 macOS 上方便地运行 Windows 和其他操作系统。这款软件尤其适合开发者、设计师以及任何需要使用不同操作系统的用户。本文将为新手用户提供一步一步的指…

Devicenet从站数据 转profinet IO项目案例

目录 1 案例说明 1 2 VFBOX网关工作原理 1 3 准备工作 2 4 网关用DEVICENET协议采集数据 3 5 用PROFINET IO协议转发数据 4 6 案例总结 7 1 案例说明 设置网关采集Devicenet从站设备数据把采集的数据转成profinet IO协议转发给其他系统。 2 VFBOX网关工作原理 VFBOX网关是协…

javacpp调用c++动态库

1、准备条件安装Visual Studio2022 Visual Studio下载安装-CSDN博客 2、使用 Visual Studio导出动态库 Visual Studio导出动态库-CSDN博客 会用到上面文章中的 pch.h、mycpp.dll和mycpp.lib 3、新建文件mycpp.h,把pch.h中的内容复制到mycpp.h,把mycpp.h中的 #include &…

【华为HCIP实战课程三】动态路由OSPF的NBMA环境建立邻居及排错,网络工程师

一、NBMA环境下的OSPF邻居建立问题 上节我们介绍了NBMA环境下OSPF邻居建立需要手动指定邻居,因为NBMA环境是不支持广播/组播的 上一节AR1的配置: ospf 1 peer 10.1.1.4 //手动指定邻居的接口地址,而不是RID peer 10.1.1.5 area 0.0.0.0 手动指定OSPF邻居后抓包查看OSP…

51单片机的教室智能照明系统【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块DS1302时钟模块光照传感器红外传感器温度传感器LED等模块构成。适用于教室灯光全自动控制、教室节能灯控制、教室智能照明等相似项目。 可实现功能: 1、LCD1602实时显示时间、温度、光照强度等信息 2、光照强度传…

【北京迅为】《STM32MP157开发板嵌入式开发指南》- 第十三章 Linux连接档概念

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器&#xff0c;既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构&#xff0c;主频650M、1G内存、8G存储&#xff0c;核心板采用工业级板对板连接器&#xff0c;高可靠&#xff0c;牢固耐…

头戴式蓝牙耳机哪个品牌比较好?西圣、声阔、QCY热款实测性能PK

头戴式蓝牙耳机凭借其卓越的音质表现、沉浸式的听音体验以及出色的降噪功能&#xff0c;成为了众多音乐爱好者和通勤人士的首选&#xff0c;随着技术的不断进步&#xff0c;西圣、声阔、QCY等知名品牌纷纷推出了各具魅力的头戴式蓝牙耳机产品&#xff0c;面对它们家的耳机&…

哪个待办事项提醒软件推荐?待办事项提醒软件哪个合适?

在快节奏的现代生活中&#xff0c;我们每个人每天都会被各种待办事项所包围。从工作计划到个人生活&#xff0c;从学习任务到家庭琐事&#xff0c;这些事项往往繁杂且紧急&#xff0c;稍不留神就可能错过重要的截止日期。因此&#xff0c;选择一款合适的待办事项提醒软件&#…

图片四个角怎么能做成圆弧角?这几种制作方法操作起来很简单!

图片四个角怎么能做成圆弧角&#xff1f;在当今这个视觉内容爆炸的时代&#xff0c;图像不仅仅是信息的载体&#xff0c;更是情感交流的桥梁&#xff0c;深刻地渗透进我们的日常生活&#xff0c;然而&#xff0c;一个微妙却常被边缘化的观察是&#xff0c;传统图片那尖锐的直角…

网站建设中,SSL协议、TLS协议,分别是什么,有什么区别?

SSL&#xff08;Secure Sockets Layer&#xff09;和TLS&#xff08;Transport Layer Security&#xff09;是网络安全中用于保护数据传输的两个核心协议。它们在基本功能、握手过程以及安全性等方面有所不同。具体分析如下&#xff1a; 基本功能 SSL&#xff1a;提供加密、认证…

认识联合体和枚举

目录 一.联合体 1.联合体的声明 2.联合体的特点 &#xff08;一&#xff09;内存共享 &#xff08;二&#xff09;大小等于最大成员的大小 另一特殊情况: &#xff08;三&#xff09;一次只能使用一个成员 3.联合体相比较于结构体 &#xff08;一&#xff09;内存分配 …

OpenCV-图像拼接

文章目录 一、基本原理二、步骤三、代码实现1.定义函数2.读取图像3.图像配准&#xff08;1&#xff09;.特征点检测&#xff08;2&#xff09;.特征匹配 4.透视变换5.图像拼接 四、图像拼接的注意事项 图像拼接是一种将多张有重叠部分的图像合并成一张无缝的全景图或高分辨率图…

【Python】Beaker:轻量级缓存与会话管理的解决方案

Beaker 是一个简单、灵活的 Python 库&#xff0c;主要用于缓存管理和会话管理。作为一个开源项目&#xff0c;Beaker 提供了多种缓存存储后端&#xff0c;帮助开发者在应用中高效管理缓存数据&#xff0c;同时支持会话存储&#xff0c;适合 Web 应用中的用户状态管理。其轻量级…

AIGC: 从两个维度快速选择大模型开发技术路线

在当今人工智能飞速发展的时代&#xff0c;大模型开发技术路线的选择至关重要。本文将从两个维度出发&#xff0c;为大家快速介绍不同的大模型开发技术路线&#xff0c;帮助你在开发过程中做出明智的决策。 一、两个维度解析 传入大模型的信息 低要求&#xff1a;传入的信息相…