当前位置: 首页 > news >正文

java8四大基本函数式接口

 

1.什么是函数式接口?

  • 只包含一个抽象方法的接口,称为函数式接口
  • 你可以通过Lambda表达式来创建该接口的对象。(若Lambda表达式抛出一个受检异常,那么该异常需要在目标接口的抽象方法上进行声明)
  • 我们可以在任意函数式接口上使用@FunctionalInterface注解,这样做可以检查它是否是一个函数式接口,同时javadoc也会包含一条声明,说明这个接口是一个函数式接口

2.四大函数式接口的使用

函数接口如果使用的好能让我们的代码变得较为简洁,且减少重复代码。

2.1. Consumer<T> 消费型接口,有入参,无返回值

源码:

@FunctionalInterface
public interface Consumer<T> {/*** Performs this operation on the given argument.** @param t the input argument*/void accept(T t);
}

例子 设置属性name和nameDesc的值:

    public static void main(String[] args) {List<UserInfo> userInfoList = getUserList();userInfoList.forEach(obj -> {functionTest(obj::setName);functionTest(obj::setNameDesc);System.out.println(obj);});}public static void functionTest(Consumer<String> consumer){consumer.accept("name");}

2.2 Function<T, R> 函数型接口 有入参 有返回值

源码:


@FunctionalInterface
public interface Function<T, R> {/*** Applies this function to the given argument.** @param t the function argument* @return the function result*/R apply(T t);}

例子 获取属性nameDesc的值:

    public static void main(String[] args) {List<UserInfo> userInfoList = getUserList();userInfoList.forEach(obj -> {functionTest(obj, UserInfo::getNameDesc);});}public static void functionTest(UserInfo userInfo, Function<UserInfo, String> function){String apply = function.apply(userInfo);System.out.println(apply);
}

2.3 Supplier<T> 提供型接口 空参但是有返回值

源码:


@FunctionalInterface
public interface Supplier<T> {/*** Gets a result.** @return a result*/T get();
}

例子 获取属性nameDesc的值:

    public static void main(String[] args) {List<UserInfo> userInfoList = getUserList();userInfoList.forEach(obj -> {functionTest(obj::getNameDesc);});}public static void functionTest(Supplier<String> supplier){String s = supplier.get();}

2.4 Predicat<T> 断言型接口 返回真假

源码:


@FunctionalInterface
public interface Predicate<T> {/*** Evaluates this predicate on the given argument.** @param t the input argument* @return {@code true} if the input argument matches the predicate,* otherwise {@code false}*/boolean test(T t);
}

例子 计算一个数字是否大于100: 

    public static void main(String[] args) {functionTest(50, x -> x > 100);}public static void functionTest(int x, Predicate<Integer> predicate){boolean test = predicate.test(x);System.out.println(test);}

3.其他函数式接口

序号接口描述
1BiConsumer<T,U>代表了一个接受两个输入参数的操作,并且不返回任何结果
2BiFunction<T,U,R>代表了一个接受两个输入参数的方法,并且返回一个结果
3BinaryOperator<T>

代表了一个作用于于两个同类型操作符的操作,并且返回了

操作符同类型的结果

4BiPredicate<T,U>代表了一个两个参数的boolean值方法
5BooleanSupplier代表了boolean值结果的提供方
6Consumer<T>代表了接受一个输入参数并且无返回的操作
7DoubleBinaryOperator

代表了作用于两个double值操作符的操作,并且返回了

一个double值的结果

8DoubleConsumer代表一个接受double值参数的操作,并且不返回结果。
9DoubleFunction<R>代表接受一个double值参数的方法,并且返回结果
10DoublePredicate代表一个拥有double值参数的boolean值方法
11DoubleSupplier代表一个double值结构的提供方
12DoubleToIntFunction接受一个double类型输入,返回一个int类型结果
13DoubleToLongFunction接受一个double类型输入,返回一个long类型结果
14DoubleUnaryOperator接受一个参数同为类型double,返回值类型也为double
15Function<T,R>接受一个输入参数,返回一个结果。
16IntBinaryOperator接受两个参数同为类型int,返回值类型也为int 
17IntConsumer接受一个int类型的输入参数,无返回值 
18IntFunction<R>接受一个int类型输入参数,返回一个结果 。
19IntPredicate接受一个int输入参数,返回一个布尔值的结果
20IntSupplier无参数,返回一个int类型结果
21IntToDoubleFunction接受一个int类型输入,返回一个double类型结果 
22IntToLongFunction接受一个int类型输入,返回一个long类型结果
23IntUnaryOperator接受一个参数同为类型int,返回值类型也为int 
24LongBinaryOperator接受两个参数同为类型long,返回值类型也为long
25LongConsumer接受一个long类型的输入参数,无返回值
26LongFunction<R>接受一个long类型输入参数,返回一个结果
27LongPredicateR接受一个long输入参数,返回一个布尔值类型结果
28LongSupplier无参数,返回一个结果long类型的值
29LongToDoubleFunction接受一个long类型输入,返回一个double类型结果
30LongToIntFunction接受一个long类型输入,返回一个int类型结果
31LongUnaryOperator接受一个参数同为类型long,返回值类型也为long
32ObjDoubleConsumer<T>接受一个object类型和一个double类型的输入参数,无返回值
33ObjIntConsumer<T>接受一个object类型和一个int类型的输入参数,无返回值
34ObjLongConsumer<T>接受一个object类型和一个long类型的输入参数,无返回值
35Predicate<T>接受一个输入参数,返回一个布尔值结果
36Supplier<T>无参数,返回一个结果
37ToDoubleBiFunction<T,U>接受两个输入参数,返回一个double类型结果
38ToDoubleFunction<T>接受一个输入参数,返回一个double类型结果
39ToIntBiFunction<T,U>接受两个输入参数,返回一个int类型结果
40ToIntFunction<T>接受一个输入参数,返回一个int类型结果
41ToLongBiFunction<T,U>接受两个输入参数,返回一个long类型结果
42ToLongFunction<T>接受一个输入参数,返回一个long类型结果
43UnaryOperator<T>接受一个参数为类型T,返回值类型也为T

相关文章:

java8四大基本函数式接口

1.什么是函数式接口? 只包含一个抽象方法的接口&#xff0c;称为函数式接口你可以通过Lambda表达式来创建该接口的对象。&#xff08;若Lambda表达式抛出一个受检异常&#xff0c;那么该异常需要在目标接口的抽象方法上进行声明&#xff09;我们可以在任意函数式接口上使用Fu…...

Junit测试框架

一、简介 Junit框架是一个开源的Java语言单元测试框架&#xff0c;Java方向使用最广泛的单元测试框架&#xff0c;使用Java开发者都应该学习Junit并能掌握单元测试的编写。 对于Junit和Selenium的关系&#xff1a;通俗点来说Selenium如果比喻为灯泡&#xff0c;那么Junit就是电…...

操作系统复习题

什么是线程&#xff1f; 线程&#xff08;Thread&#xff09;&#xff1a;轻量级进程&#xff0c;是操作系统进行调度的最小单位。一个线程是一个任务&#xff08;一个程序段&#xff09;的一次执行过程。线程不占有内存空间&#xff0c;它包括在进程的内存空间中。在同一个进程…...

web项目的初始化

Tomcat 安装配置 Tomcat 官方站点&#xff1a;Apache Tomcat - Welcome! 。 安装 得到下载的安装包&#xff08;一般是 zip 文件&#xff09;&#xff0c;并解压到你指定的目录&#xff08;建议不要解压在 c 盘&#xff09;&#xff1b;&#xff08;这里以 windows10 系统为例…...

29- 迁移学习 (TensorFlow系列) (深度学习)

知识要点 迁移学习: 使用别人预训练模型参数时&#xff0c;要注意别人的预处理方式。 常见的迁移学习方式&#xff1a; 载入权重后训练所有参数.载入权重后只训练最后几层参数.载入权重后在原网络基础上再添加一层全连接层&#xff0c;仅训练最后一个全连接层.训练数据是 10_m…...

工具篇(五)炫酷排版,尽在LaTeX:让你的文档飞升吧!

作者的话 作为一个文本排版工具&#xff0c;latex一直以来都备受科研工作者、学生和出版社的青睐。但是对于初学者来说&#xff0c;latex的学习曲线可能会有些陡峭。因此&#xff0c;我写这篇博客旨在为初学者提供一个简单易懂的latex教程&#xff0c;让大家能够快速入门并掌握…...

【蓝桥杯PythonB组备赛】【Acwing周赛】第93场 4867. 整除数 4868. 数字替换 python解

目录 A AcWing 4867. 整除数 1.题目描述 2.思路分析 3.代码实现 B AcWing 4868. 数字替换 1.题目描述 2.思路分析 3.代码实现 A AcWing 4867. 整除数 1.题目描述 2.思路分析 为什么不能直接暴力&#xff1f; 数据&#xff1a;1 ≤ n, k ≤ 10 ** 9 1s内最多…...

KNN学习报告

原理 KNN算法就是在其表征空间中&#xff0c;求K个最邻近的点。根据已知的这几个点对其进行分类。如果其特征参数只有一个&#xff0c;那么就是一维空间。如果其特征参数只有两个&#xff0c;那么就是二维空间。如果其特征参数只有三个&#xff0c;那么就是三维空间。如果其特征…...

Java奠基】方法的讲解与使用

目录 方法概述 方法的定义与调用 方法的重载 方法的值传递 方法概述 方法是程序中最小的执行单元&#xff0c;在实际开发中会将重复的具有独立功能的代码抽取到方法中&#xff0c;这样可以提高代码的复用性和可维护性。 方法的定义与调用 在Java中定义方法的格式都是相同…...

字符串hash

K - 子串翻转回文串2020ccpc河南省赛字符串哈希&#xff1a;将字符串变成x进制数对公式的理解&#xff1a;举个十进制数的例子&#xff1a;123456h[1]1&#xff1b;h[2]1*10212;h[3]12*103123;h[4]123*1041234;.........h[i]h[i-1]*xa[i];h[i]代表的恰巧是整个数的前缀用p[i]表…...

试题 算法训练 转圈游戏

问题描述 n个小伙伴&#xff08;编号从0到n-1&#xff09;围坐一圈玩游戏。按照顺时针方向给n个位置编号&#xff0c;从0到n-1。   最初&#xff0c;第0号小伙伴在第0号位置&#xff0c;第1号小伙伴在第 1 号位置&#xff0c;……&#xff0c;依此类推。   游戏规则如下&am…...

【uni-app教程】九、运行环境判断与跨端兼容

&#xff08;1&#xff09;开发环境和生产环境 uni-app 可通过 process.env.NODE_ENV 判断当前环境是开发环境还是生产环境&#xff0c;一般用于连接测试服务器或生产服务器的动态切换。 在HBuilderX 中&#xff0c;点击「运行」编译出来的代码是开发环境&#xff0c;点击「发行…...

扩展WSL2虚拟硬盘的大小

扩展WSL2虚拟硬盘的大小 1、在 Windows PowerShell 中终止所有 WSL 实例 wsl --shutdown2、查看 WSL 实例运行状态&#xff0c;确认关闭&#xff0c;并记住发行版的名称 wsl -l -v如果没有更改移动过发行版安装包位置&#xff0c;那么可以通过以下方法查找到发行版的安装包位…...

Win系统蓝牙设备频繁卡顿/断连 - 解决方案

Win系统蓝牙设备频繁卡顿/断连 - 解决方案前言常见网卡Intel无线网卡&#xff08;推荐&#xff09;Realtek无线网卡总结查看本机网卡解决方案更新驱动更换网卡&#xff08;推荐&#xff09;前言 无线网卡有2个模块&#xff0c;一个是WiFi&#xff0c;一个是蓝牙&#xff0c;因…...

Git学习入门(2)- 基本命令操作总结

个人博客&#xff1a;我的个人博客&#xff0c;各位大佬来玩1 创建 git仓库1.1 从现有工作目录中初始化新仓库需要到你需要用git管理的项目中输入以下命令&#xff1a;git init便会创建一个空的git项目&#xff0c;并且当前目录下会出现一个名为 .git 的目录&#xff0c; Git 需…...

SPringCloud:Nacos快速入门及相关属性配置

目录 一、Nacos快速入门 1、在父工程中添加spring-cloud-alilbaba的管理依赖 2、如果有使用eureka依赖&#xff0c;将其注释 3、添加nacos的客户端依赖 4、修改yml文件&#xff0c;注释eureka配置 5、启动测试 二、Nacos相关属性配置 1、Nacos服务分级存储 2、根据集群…...

医疗器械之模糊算法(嵌入式部分)

模糊控制 所谓模糊控制&#xff0c;就是对难以用已有规律描述的复杂系统&#xff0c;采用自然语言&#xff08;如大&#xff0c;中&#xff0c;小&#xff09;加以描述&#xff0c;借助定性的&#xff0c;不精确的以及模糊的条件语句来表达&#xff0c;模糊控制是一种基于语言的…...

网上销售笔记本系统

技术&#xff1a;Java、JSP等摘要&#xff1a;本文讲述了基于B/S模式的笔记本电脑在线销售系统的设计与实现。所谓的笔记本电脑在线销售系统是通过网站推广互联企业的笔记本电脑和技术服务&#xff0c;并使客户随时可以了解企业和企业的产品&#xff0c;为客户提供在线服务和订…...

MySQL基础查询操作

文章目录&#x1f68f; Select语句&#x1f680; 一、SQL底层执行原理&#x1f6ac; &#xff08;一&#xff09;、查询的结构&#x1f6ac; &#xff08;二&#xff09;、SQL语句的执行过程&#x1f6ad; 1、WHERE 为什么不包含聚合函数的过滤条件&#xff1f;&#xff08;面试…...

English Learning - L2 语音作业打卡 小元音 [ʌ] [ɒ] Day9 2023.3.1 周三

English Learning - L2 语音作业打卡 小元音 [ʌ] [ɒ] Day9 2023.3.1 周三&#x1f48c;发音小贴士&#xff1a;&#x1f48c;当日目标音发音规则/技巧:&#x1f36d; Part 1【热身练习】&#x1f36d; Part2【练习内容】&#x1f36d;【练习感受】&#x1f353;元音 [ʌ]&…...

Embedded Coder实战:5分钟搞定PID控制器的C代码生成(附完整配置流程)

Embedded Coder实战&#xff1a;5分钟搞定PID控制器的C代码生成&#xff08;附完整配置流程&#xff09; 在工业自动化领域&#xff0c;PID控制器就像一位不知疲倦的调节大师&#xff0c;默默维持着无数设备的稳定运行。想象一下&#xff0c;当你需要将这套经典算法部署到资源有…...

Pexpect与subprocess对比:何时选择哪个Python进程控制工具

Pexpect与subprocess对比&#xff1a;何时选择哪个Python进程控制工具 【免费下载链接】pexpect A Python module for controlling interactive programs in a pseudo-terminal 项目地址: https://gitcode.com/gh_mirrors/pe/pexpect 在Python自动化脚本开发中&#xff…...

天华新能冲刺港股:年营收75亿净利降56% 宁德时代是二股东 裴振华夫妻套现26亿

雷递网 雷建平 4月3日苏州天华新能源科技股份有限公司&#xff08;简称&#xff1a;“天华新能”&#xff09;日前递交招股书&#xff0c;准备在港交所上市。天华新能2014年在深交所上市&#xff0c;截至今日午盘&#xff0c;天华新能股价为58.6元&#xff0c;市值为487亿元。一…...

别再折腾Docker了!用CasaOS在Ubuntu上5分钟搞定个人轻NAS(附国内源配置)

别再折腾Docker了&#xff01;用CasaOS在Ubuntu上5分钟搞定个人轻NAS&#xff08;附国内源配置&#xff09; 你是否曾经被Docker复杂的配置流程劝退&#xff1f;或者对传统NAS系统如TrueNAS的庞大资源占用感到头疼&#xff1f;如果你手头有一台闲置的旧电脑或树莓派&#xff0c…...

从空调到电动车:拆解NTC和PTC热敏电阻在你身边电子产品里的‘隐藏任务’

从空调到电动车&#xff1a;拆解NTC和PTC热敏电阻在你身边电子产品里的‘隐藏任务’ 你有没有想过&#xff0c;为什么手机快充时充电头不会烫到冒烟&#xff1f;汽车座椅加热为什么不会越坐越烫&#xff1f;这些看似简单的日常体验背后&#xff0c;其实都藏着一对神奇的电子元件…...

从裸机开发到RTOS:嵌入式系统进阶指南

1. 裸机开发的本质与局限性裸机开发&#xff0c;顾名思义就是在没有任何操作系统支持下直接对硬件进行编程。这种方式在嵌入式系统入门阶段非常普遍&#xff0c;尤其适合资源极其有限的8位单片机&#xff08;如51系列&#xff09;或简单应用场景。但当我们面对STM32这类性能强大…...

SenseVoicecpp ggml-vulkan.cpp大模型[AI人工智能(七十八)]—东方仙盟

ggml-vulkan.cpp核心代码ggml-vulkan 里负责【矩阵乘法 量化模型推理 GPU 调度】的核心代码。1. 核心功能支持所有量化类型&#xff1a;Q4_K、Q5_K、Q8_0、IQ2/3/4、F16、F32 等自动选择最优计算管线&#xff1a;根据数据类型选 FP16/FP32 精度管理 GPU 内存&#xff1a;显存…...

千问3.5-9B模型蒸馏:轻量化OpenClaw移动端部署

千问3.5-9B模型蒸馏&#xff1a;轻量化OpenClaw移动端部署 1. 为什么需要端侧轻量化 去年夏天&#xff0c;我在树莓派上尝试部署OpenClaw时遇到了一个尴尬的问题——原版Qwen-14B模型需要至少32GB内存才能流畅运行&#xff0c;而我的树莓派4B仅有8GB。每次启动不到5分钟就会因…...

三菱FX5U ModbusTCP从站配置避坑指南:从IP冲突到通讯成功的完整流程

三菱FX5U ModbusTCP从站配置避坑指南&#xff1a;从IP冲突到通讯成功的完整流程 工业自动化领域中&#xff0c;ModbusTCP通讯协议因其简单高效的特点&#xff0c;成为PLC与上位机交互的常用方式。三菱FX5U系列PLC作为一款高性价比的可编程控制器&#xff0c;在中小型自动化项目…...

LLM性能评估入门到精通,搞懂推理指标看这篇就够了!

TTFT、TPOT、ITL、Goodput… 这些指标到底什么意思&#xff1f;今天用一篇文章彻底讲清楚 LLM 推理的性能评估体系。 一、为什么指标很重要 生产环境的真实场景 你部署了一个大模型服务&#xff0c;用户反馈&#xff1a; “首字响应好慢” → 什么问题&#xff1f;“生成过程…...