【Java技术专题】「Java8技术盲区」函数接口字典-看看还有哪些你所不知道函数接口

news2025/8/12 3:56:32

函数接口的定义

函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。

函数接口的特点

  • 函数式接口可以被隐式转换为lambda表达式。

  • Lambda表达式和方法引用(实际上也可认为是Lambda表达式)上。

  • 如定义了一个函数式接口如下:

@FunctionalInterface
interface FunctionInterfaceSample {
    void handle(Object parameter);
}

那么就可以使用Lambda表达式来表示该接口的一个实现(注:JAVA 8 之前一般是用匿名类实现的):

FunctionInterfaceSample functionSample = param -> System.out.println(param);

Java8之前已经定义的函数接口

函数式接口可以对现有的函数友好地支持 lambda,大家可以直接放心使用!

  • java.lang.Runnable:runable线程可执行操作接口

  • java.util.concurrent.Callable:Callbale线程可执行接口

  • java.security.PrivilegedAction:权限控制器

  • java.util.Comparator:排序比较接口

  • java.io.FileFilter:文件过滤器

  • java.nio.file.PathMatcher:路径匹配器

  • java.lang.reflect.InvocationHandler:动态代理接口

  • java.beans.PropertyChangeListener:properties属性监控接口

  • 等等

Java8新增加的函数接口

主要包含在java.util.function包里面,它包含了很多类,用来支持 Java的 函数式编程,该包中的函数式接口有:

普通双参类型函数接口:

  1. BiConsumer<T,U>:代表了一个接受两个输入参数的操作,并且不返回任何结果

  2. BiFunction<T,U,R>:代表了一个接受两个输入参数的方法,并且返回一个结果

  3. BinaryOperator:代表了一个作用于两个同类型操作符的操作,并且返回了操作符同类型的结果

  4. BiPredicate<T,U>:代表了一个两个参数的boolean值方法。

双参类型函数接口:

  1. BooleanSupplier:代表了boolean值结果的提供方

  2. Consumer:代表了接受一个输入参数并且无返回的操作

  3. Function<T,R>:接受一个输入参数,返回一个结果。

Double类型函数接口:

  1. DoubleConsumer:代表一个接受double值参数的操作,并且不返回结果。

  2. DoubleFunction:代表接受一个double值参数的方法,并且返回结果

  3. DoublePredicate:代表一个拥有double值参数的boolean值方法

  4. DoubleSupplier:代表一个double值结构的提供方

  5. DoubleToIntFunction:接受一个double类型输入,返回一个int类型结果。

  6. DoubleToLongFunction:接受一个double类型输入,返回一个long类型结果

  7. DoubleUnaryOperator:接受一个参数同为类型double,返回值类型也为double 。

  8. DoubleBinaryOperator:代表了作用于两个double值操作符的操作,并且返回了一个double值的结果。

Integer类型函数接口:

  1. IntBinaryOperator:接受两个参数同为类型int,返回值类型也为int 。

  2. IntConsumer:接受一个int类型的输入参数,无返回值 。

  3. IntFunction:接受一个int类型输入参数,返回一个结果 。

  4. IntPredicate:接受一个int输入参数,返回一个布尔值的结果。

  5. IntSupplier:无参数,返回一个int类型结果。

  6. IntToDoubleFunction:接受一个int类型输入,返回一个double类型结果 。

  7. IntToLongFunction:接受一个int类型输入,返回一个long类型结果。

  8. IntUnaryOperator:接受一个参数同为类型int,返回值类型也为int 。

Long类型函数接口:

  1. LongBinaryOperator:接受两个参数同为类型long,返回值类型也为long。

  2. LongConsumer:接受一个long类型的输入参数,无返回值。

  3. LongFunction:接受一个long类型输入参数,返回一个结果。

  4. LongPredicate:R接受一个long输入参数,返回一个布尔值类型结果。

  5. LongSupplier:无参数,返回一个结果long类型的值。

  6. LongToDoubleFunction:接受一个long类型输入,返回一个double类型结果。

  7. LongToIntFunction:接受一个long类型输入,返回一个int类型结果。

  8. LongUnaryOperator:接受一个参数同为类型long,返回值类型也为long。

  9. ObjDoubleConsumer:接受一个object类型和一个double类型的输入参数,无返回值。

  10. ObjIntConsumer:接受一个object类型和一个int类型的输入参数,无返回值。

  11. ObjLongConsumer:接受一个object类型和一个long类型的输入参数,无返回值。

Long类型函数接口:

  1. Predicate:接受一个输入参数,返回一个布尔值结果。

  2. Supplier:无参数,返回一个结果。

转换类型接口

  1. ToDoubleBiFunction<T,U>
    接受两个输入参数,返回一个double类型结果

  2. ToDoubleFunction
    接受一个输入参数,返回一个double类型结果

  3. ToIntBiFunction<T,U>
    接受两个输入参数,返回一个int类型结果。

  4. ToIntFunction
    接受一个输入参数,返回一个int类型结果。

  5. ToLongBiFunction<T,U>
    接受两个输入参数,返回一个long类型结果。

  6. ToLongFunction
    接受一个输入参数,返回一个long类型结果。

  7. UnaryOperator
    接受一个参数为类型T,返回值类型也为T。

函数接口配合Stream流工作

Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。

  • 元素流在管道中经过中间操作(函数接口、处理操作)的处理(管道的节点上进行处理, 比如筛选, 排序,聚合等),最后由最终操作(terminal operation)得到前面处理的结果。
+--------------------+       +------+   +------+   +---+   +-------+
| stream of elements +-----> |filter+-> |sorted+-> |map+-> |collect|
+--------------------+       +------+   +------+   +---+   +-------+

元素是特定类型的对象,形成一个队列。 Java中的Stream并不会存储元素,而是按需计算,聚合操作:filter, map, reduce, find, match, sorted等。

  • Pipelining: 中间操作都会返回流对象本身。 这样多个操作可以串联成一个管道, 如同流式风格(fluent style)。 这样做可以对操作进行优化, 比如延迟执行(laziness)和短路( short-circuiting)。
  • 内部迭代: 以前对集合遍历都是通过Iterator或者For-Each的方式, 显式的在集合外部进行迭代, 这叫做外部迭代。 Stream提供了内部迭代的方式, 通过访问者模式(Visitor)实现。

(Java8其他API)内容小贴士

Java8的时间日期API

  • Instant 时间戳
  • Duration 持续时间、时间差
  • LocalDate 只包含日期,比如:2018-09-24
  • LocalTime 只包含时间,比如:10:32:10
  • LocalDateTime 包含日期和时间,比如:2018-09-24 10:32:10
  • Peroid 时间段
  • ZoneOffset 时区偏移量,比如:+8:00
  • ZonedDateTime 带时区的日期时间
  • Clock 时钟,可用于获取当前时间戳
  • java.time.format.DateTimeFormatter 时间格式化类

Java8的Base64API-小贴士

  • Base64编码已经成为Java类库的标准,Base64 编码的编码器和解码器,Java8提供了一套静态方法获取下面三种Base64编解码器:

    • 基本:输出被映射到一组字符A-Za-z0-9+/,编码不添加任何行标,输出的解码仅支持A-Za-z0-9+/。
    • URL:输出映射到一组字符A-Za-z0-9+_,输出是URL和文件。
    • MIME:输出隐射到MIME友好格式。输出每行不超过76字符,并且使用’\r’并跟随’\n’作为分割。编码输出最后没有行分割。
内嵌类

方法列表

Base64 实例
public static void main(String[] args){
        String str = new String(Base64.getEncoder().encode("1231231231231".getBytes()));
        System.out.println(str);
        str = new String(Base64.getDecoder().decode(str));
        System.out.println(str);
        String str2 = Base64.getEncoder().encodeToString("1231231231231".getBytes("utf-8"));
        System.out.println("Base64 编码字符串 :" + str2);
        String mimeEncodedString = Base64.getMimeEncoder().encodeToString(UUID.randomUUID().toString());
        System.out.println("Base64 编码字符串 (MIME) :" + mimeEncodedString);
}

内容参考

  • https://www.runoob.com/java/java8-base64.html
  • https://www.runoob.com/java/java8-streams.html
  • https://www.cnblogs.com/ark-blog/p/9694950.html

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

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

相关文章

子序列宽度之和

目录题目1. 子序列2. 子序列找最大最小值3. 代码题目 一个序列的 宽度 定义为该序列中最大元素和最小元素的差值。 给你一个整数数组 nums &#xff0c;返回 nums 的所有非空 子序列 的 宽度之和 。由于答案可能非常大&#xff0c;请返回对 109 7 取余 后的结果。 子序列 定义…

[附源码]java毕业设计农业种植管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

IDEA中给源码添加自己注释——private-notes插件安装使用

一、前言 我们在空闲之余喜欢研究一些经典框架的源码&#xff0c;发现没办法把自己的注释添加上。 会给出提示&#xff1a;File is read-only 很烦&#xff0c;但是为了安全考虑也是没有办法的&#xff01; 这是一个大佬就写了一个IDEA插件&#xff0c;让我们摆脱了这个烦恼&a…

U2-Net 使用嵌套 U 结构进行更深入的显着目标检测

在给定图像中分割不同的对象一直是计算机视觉领域的一项众所周知的任务。多年来,我们已经看到自编码器到疯狂的深度学习模型(如 Deeplab)被用于语义分割。在所有模型的深海中,仍然有一个名字排在最前面,它就是U-Net。U-Net 于 2018 年发布,此后获得了巨大的普及,并以某种…

Android入门第30天-Android里的Toast的使用

介绍 本篇带来的是&#xff1a; Android用于提示信息的一个控件——Toast(吐司)&#xff01;Toast是一种很方便的消息提示框,会在 屏幕中显示一个消息提示框,没任何按钮,也不会获得焦点一段时间过后自动消失&#xff01; 非常常用&#xff01;我们通过一个例子把Toast的使用讲…

【重识云原生】第六章容器基础6.4.9.6节——Service 与 Pod 的DNS

1 Service 与 Pod 的 DNS Kubernetes 为 Service 和 Pod 创建 DNS 记录。 你可以使用一致的 DNS 名称而非 IP 地址访问 Service。 Kubernetes DNS 除了在集群上调度 DNS Pod 和 Service&#xff0c; 还配置 kubelet 以告知各个容器使用 DNS Service 的 IP 来解析 DNS 名称。 集…

bcn_timout,ap_probe_send_start

ESP32 使用 beacon 超时机制检测 AP 是否活跃。如果 station 在 inactive 时间内未收到所连接 AP 的 beacon&#xff0c;将发生 beacon 超时。inactive 时间通过调用函数 esp_wifi_set_inactive_time() 设置。 beacon 超时发生后&#xff0c;station 将向 AP 发送 5 个 probe …

智芯传感MEMS压力传感器促进无人机跨入极其广阔的应用市场

2022年11月8日至13日&#xff0c;第十四届中国国际航空航天博览会在广东珠海国际航展中心举办。伴随着人工智能技术的进步&#xff0c;全球无人化装备的发展如火如荼。各式各样的无人机在无人化装备中可谓是一枝独秀&#xff0c;广受外界的高度关注。 据美国《Aviation Week&am…

【元宇宙欧米说】从GameFi的视角讨论Web2到Web3的利弊

什么将会是Web3生态赛道发展的未来&#xff1f;争议很大的GameFi如何建立高价值的商业生态&#xff1f; 11月23日下午三点&#xff0c;IDV合作经理Chillax将以“从GameFi视角讨论Web2到Web3的利弊”为题&#xff0c;与大家共同探讨Web3时代的到来如何影响GameFi的发展。 Bloc…

web自动化测试入门篇03——selenium使用教程

&#x1f60f;作者简介&#xff1a;博主是一位测试管理者&#xff0c;同时也是一名对外企业兼职讲师。 &#x1f4e1;主页地址&#xff1a;【Austin_zhai】 &#x1f646;目的与景愿&#xff1a;旨在于能帮助更多的测试行业人员提升软硬技能&#xff0c;分享行业相关最新信息。…

C++ Reference: Standard C++ Library reference: Containers: deque: deque: insert

C官网参考链接&#xff1a;https://cplusplus.com/reference/deque/deque/insert/ 公有成员函数 <deque> std::deque::insert C98 单个元素 (1) iterator insert (iterator position, const value_type& val); 填充 (2) void insert (iterator position, s…

华为OD机试真题(JavaScript)

更新中....... 创作不易&#xff0c;如果你觉得有帮助&#xff0c;就三连支持吧 本目录中所有算法题均使用JavaScript语言实现&#xff0c;并且基于node环境运行。 因此&#xff0c;我们需要在本地安装node环境&#xff0c;安装完node环境后&#xff0c;可以使用node命令直接运…

Golang学习之路6-goroutine并发

文章目录前言一、goroutine用法二、goroutine循环三、goroutine提前退出四、goroutine双向管道五、goroutine单向管道六、监听管道如下图&#xff0c;可以看到当我们监听到有写入数据时会得到对应的类型数据&#xff0c;当没有写入时 default 一直在负责监听&#xff01; ![在这…

前端播放m3u8格式视频

m3u8是苹果公司推出的视频播放标准&#xff0c;是m3u的一种&#xff0c;只是编码格式采用的是UTF-8。m3u8准确来说是一种索引文件&#xff0c;使用m3u8文件实际上是通过它来解析对应的放在服务器上的视频网络地址&#xff0c;从而实现在线播放。 m3u8格式的视频是将文件分成一小…

[附源码]计算机毕业设计JAVA个性化新闻推荐系统

[附源码]计算机毕业设计JAVA个性化新闻推荐系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM myba…

高级篇之ENC1V2新用法USB/RS232串口转Visca-Over-IP

高级篇之ENC1V2新用法USB/RS232串口转Visca-Over-IP术语背景现实需求大家好&#xff0c;最近ENC1-V2卖的很火&#xff0c;主要是因为发现了它的一个新用法&#xff0c;究竟是什么&#xff0c;马上揭晓。 术语 摄像机控制代码协议包括PTZ,VISCA,VISCA-OVER-IP,PELCO等, VISCA是…

java计算机毕业设计ssm求职与招聘网站的设计与实现

项目介绍 本前途招聘求职网站是针对目前仓库的实际需求,从实际工作出发,对过去的前途招聘求职网站存在的问题进行分析,完善用户的使用体会。采用计算机系统来管理信息,取代人工管理模式,查询便利,信息准确率高,节省了开支,提高了工作的效率。 本系统结合计算机系统的结构、概念…

配置hadoop模板虚拟机

文章目录前言一、VMvare安装与添加Linux虚拟机二、linux服务器更改网络配置三、安装epel-release以及关闭防火墙关闭防火墙四、配置用户权限五、卸载自带的JDK前言 本文主要讲述配置hadoop集群的前置工作之一&#xff0c;配置模板虚拟机。 模板虚拟机的用处在于&#xff0c;我…

通过工具和字节码带你深入理解运行时数据区

上篇文章介绍了JVM运行时数据区的一些信息&#xff0c;这篇文章将通过工具和字节码加深对常用的堆和虚拟机栈部分的理解。 虚拟机栈再理解 下面通过3个简单的例子再深入了解一下虚拟机栈区域。 1. 虚拟机栈的出入栈过程 public class JVMStack {public static void main(St…

【JVM学习】Jconsole 配置jmx 监控JVM

1. 配置jvm启动参数 在使用jconsole监控jvm之前&#xff0c;首先需要先打开jmx。启动jvm时&#xff0c;添加以下参数。jmx通过58088端口对外开放。 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port58088 -Dcom.sun.management.jmxremote.sslfalse -Dcom…