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.其他函数式接口
| 序号 | 接口 | 描述 |
|---|---|---|
| 1 | BiConsumer<T,U> | 代表了一个接受两个输入参数的操作,并且不返回任何结果 |
| 2 | BiFunction<T,U,R> | 代表了一个接受两个输入参数的方法,并且返回一个结果 |
| 3 | BinaryOperator<T> | 代表了一个作用于于两个同类型操作符的操作,并且返回了 操作符同类型的结果 |
| 4 | BiPredicate<T,U> | 代表了一个两个参数的boolean值方法 |
| 5 | BooleanSupplier | 代表了boolean值结果的提供方 |
| 6 | Consumer<T> | 代表了接受一个输入参数并且无返回的操作 |
| 7 | DoubleBinaryOperator | 代表了作用于两个double值操作符的操作,并且返回了 一个double值的结果 |
| 8 | DoubleConsumer | 代表一个接受double值参数的操作,并且不返回结果。 |
| 9 | DoubleFunction<R> | 代表接受一个double值参数的方法,并且返回结果 |
| 10 | DoublePredicate | 代表一个拥有double值参数的boolean值方法 |
| 11 | DoubleSupplier | 代表一个double值结构的提供方 |
| 12 | DoubleToIntFunction | 接受一个double类型输入,返回一个int类型结果 |
| 13 | DoubleToLongFunction | 接受一个double类型输入,返回一个long类型结果 |
| 14 | DoubleUnaryOperator | 接受一个参数同为类型double,返回值类型也为double |
| 15 | Function<T,R> | 接受一个输入参数,返回一个结果。 |
| 16 | IntBinaryOperator | 接受两个参数同为类型int,返回值类型也为int |
| 17 | IntConsumer | 接受一个int类型的输入参数,无返回值 |
| 18 | IntFunction<R> | 接受一个int类型输入参数,返回一个结果 。 |
| 19 | IntPredicate | 接受一个int输入参数,返回一个布尔值的结果 |
| 20 | IntSupplier | 无参数,返回一个int类型结果 |
| 21 | IntToDoubleFunction | 接受一个int类型输入,返回一个double类型结果 |
| 22 | IntToLongFunction | 接受一个int类型输入,返回一个long类型结果 |
| 23 | IntUnaryOperator | 接受一个参数同为类型int,返回值类型也为int |
| 24 | LongBinaryOperator | 接受两个参数同为类型long,返回值类型也为long |
| 25 | LongConsumer | 接受一个long类型的输入参数,无返回值 |
| 26 | LongFunction<R> | 接受一个long类型输入参数,返回一个结果 |
| 27 | LongPredicate | R接受一个long输入参数,返回一个布尔值类型结果 |
| 28 | LongSupplier | 无参数,返回一个结果long类型的值 |
| 29 | LongToDoubleFunction | 接受一个long类型输入,返回一个double类型结果 |
| 30 | LongToIntFunction | 接受一个long类型输入,返回一个int类型结果 |
| 31 | LongUnaryOperator | 接受一个参数同为类型long,返回值类型也为long |
| 32 | ObjDoubleConsumer<T> | 接受一个object类型和一个double类型的输入参数,无返回值 |
| 33 | ObjIntConsumer<T> | 接受一个object类型和一个int类型的输入参数,无返回值 |
| 34 | ObjLongConsumer<T> | 接受一个object类型和一个long类型的输入参数,无返回值 |
| 35 | Predicate<T> | 接受一个输入参数,返回一个布尔值结果 |
| 36 | Supplier<T> | 无参数,返回一个结果 |
| 37 | ToDoubleBiFunction<T,U> | 接受两个输入参数,返回一个double类型结果 |
| 38 | ToDoubleFunction<T> | 接受一个输入参数,返回一个double类型结果 |
| 39 | ToIntBiFunction<T,U> | 接受两个输入参数,返回一个int类型结果 |
| 40 | ToIntFunction<T> | 接受一个输入参数,返回一个int类型结果 |
| 41 | ToLongBiFunction<T,U> | 接受两个输入参数,返回一个long类型结果 |
| 42 | ToLongFunction<T> | 接受一个输入参数,返回一个long类型结果 |
| 43 | UnaryOperator<T> | 接受一个参数为类型T,返回值类型也为T |
相关文章:
java8四大基本函数式接口
1.什么是函数式接口? 只包含一个抽象方法的接口,称为函数式接口你可以通过Lambda表达式来创建该接口的对象。(若Lambda表达式抛出一个受检异常,那么该异常需要在目标接口的抽象方法上进行声明)我们可以在任意函数式接口上使用Fu…...
Junit测试框架
一、简介 Junit框架是一个开源的Java语言单元测试框架,Java方向使用最广泛的单元测试框架,使用Java开发者都应该学习Junit并能掌握单元测试的编写。 对于Junit和Selenium的关系:通俗点来说Selenium如果比喻为灯泡,那么Junit就是电…...
操作系统复习题
什么是线程? 线程(Thread):轻量级进程,是操作系统进行调度的最小单位。一个线程是一个任务(一个程序段)的一次执行过程。线程不占有内存空间,它包括在进程的内存空间中。在同一个进程…...
web项目的初始化
Tomcat 安装配置 Tomcat 官方站点:Apache Tomcat - Welcome! 。 安装 得到下载的安装包(一般是 zip 文件),并解压到你指定的目录(建议不要解压在 c 盘);(这里以 windows10 系统为例…...
29- 迁移学习 (TensorFlow系列) (深度学习)
知识要点 迁移学习: 使用别人预训练模型参数时,要注意别人的预处理方式。 常见的迁移学习方式: 载入权重后训练所有参数.载入权重后只训练最后几层参数.载入权重后在原网络基础上再添加一层全连接层,仅训练最后一个全连接层.训练数据是 10_m…...
工具篇(五)炫酷排版,尽在LaTeX:让你的文档飞升吧!
作者的话 作为一个文本排版工具,latex一直以来都备受科研工作者、学生和出版社的青睐。但是对于初学者来说,latex的学习曲线可能会有些陡峭。因此,我写这篇博客旨在为初学者提供一个简单易懂的latex教程,让大家能够快速入门并掌握…...
【蓝桥杯PythonB组备赛】【Acwing周赛】第93场 4867. 整除数 4868. 数字替换 python解
目录 A AcWing 4867. 整除数 1.题目描述 2.思路分析 3.代码实现 B AcWing 4868. 数字替换 1.题目描述 2.思路分析 3.代码实现 A AcWing 4867. 整除数 1.题目描述 2.思路分析 为什么不能直接暴力? 数据:1 ≤ n, k ≤ 10 ** 9 1s内最多…...
KNN学习报告
原理 KNN算法就是在其表征空间中,求K个最邻近的点。根据已知的这几个点对其进行分类。如果其特征参数只有一个,那么就是一维空间。如果其特征参数只有两个,那么就是二维空间。如果其特征参数只有三个,那么就是三维空间。如果其特征…...
Java奠基】方法的讲解与使用
目录 方法概述 方法的定义与调用 方法的重载 方法的值传递 方法概述 方法是程序中最小的执行单元,在实际开发中会将重复的具有独立功能的代码抽取到方法中,这样可以提高代码的复用性和可维护性。 方法的定义与调用 在Java中定义方法的格式都是相同…...
字符串hash
K - 子串翻转回文串2020ccpc河南省赛字符串哈希:将字符串变成x进制数对公式的理解:举个十进制数的例子:123456h[1]1;h[2]1*10212;h[3]12*103123;h[4]123*1041234;.........h[i]h[i-1]*xa[i];h[i]代表的恰巧是整个数的前缀用p[i]表…...
试题 算法训练 转圈游戏
问题描述 n个小伙伴(编号从0到n-1)围坐一圈玩游戏。按照顺时针方向给n个位置编号,从0到n-1。 最初,第0号小伙伴在第0号位置,第1号小伙伴在第 1 号位置,……,依此类推。 游戏规则如下&am…...
【uni-app教程】九、运行环境判断与跨端兼容
(1)开发环境和生产环境 uni-app 可通过 process.env.NODE_ENV 判断当前环境是开发环境还是生产环境,一般用于连接测试服务器或生产服务器的动态切换。 在HBuilderX 中,点击「运行」编译出来的代码是开发环境,点击「发行…...
扩展WSL2虚拟硬盘的大小
扩展WSL2虚拟硬盘的大小 1、在 Windows PowerShell 中终止所有 WSL 实例 wsl --shutdown2、查看 WSL 实例运行状态,确认关闭,并记住发行版的名称 wsl -l -v如果没有更改移动过发行版安装包位置,那么可以通过以下方法查找到发行版的安装包位…...
Win系统蓝牙设备频繁卡顿/断连 - 解决方案
Win系统蓝牙设备频繁卡顿/断连 - 解决方案前言常见网卡Intel无线网卡(推荐)Realtek无线网卡总结查看本机网卡解决方案更新驱动更换网卡(推荐)前言 无线网卡有2个模块,一个是WiFi,一个是蓝牙,因…...
Git学习入门(2)- 基本命令操作总结
个人博客:我的个人博客,各位大佬来玩1 创建 git仓库1.1 从现有工作目录中初始化新仓库需要到你需要用git管理的项目中输入以下命令:git init便会创建一个空的git项目,并且当前目录下会出现一个名为 .git 的目录, Git 需…...
SPringCloud:Nacos快速入门及相关属性配置
目录 一、Nacos快速入门 1、在父工程中添加spring-cloud-alilbaba的管理依赖 2、如果有使用eureka依赖,将其注释 3、添加nacos的客户端依赖 4、修改yml文件,注释eureka配置 5、启动测试 二、Nacos相关属性配置 1、Nacos服务分级存储 2、根据集群…...
医疗器械之模糊算法(嵌入式部分)
模糊控制 所谓模糊控制,就是对难以用已有规律描述的复杂系统,采用自然语言(如大,中,小)加以描述,借助定性的,不精确的以及模糊的条件语句来表达,模糊控制是一种基于语言的…...
网上销售笔记本系统
技术:Java、JSP等摘要:本文讲述了基于B/S模式的笔记本电脑在线销售系统的设计与实现。所谓的笔记本电脑在线销售系统是通过网站推广互联企业的笔记本电脑和技术服务,并使客户随时可以了解企业和企业的产品,为客户提供在线服务和订…...
MySQL基础查询操作
文章目录🚏 Select语句🚀 一、SQL底层执行原理🚬 (一)、查询的结构🚬 (二)、SQL语句的执行过程🚭 1、WHERE 为什么不包含聚合函数的过滤条件?(面试…...
English Learning - L2 语音作业打卡 小元音 [ʌ] [ɒ] Day9 2023.3.1 周三
English Learning - L2 语音作业打卡 小元音 [ʌ] [ɒ] Day9 2023.3.1 周三💌发音小贴士:💌当日目标音发音规则/技巧:🍭 Part 1【热身练习】🍭 Part2【练习内容】🍭【练习感受】🍓元音 [ʌ]&…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
