JDK8提供的基础函数接口Supplier,Function,BiFunction,BinaryOperator,Consumer,Predicate,Optional的使用方法

java8新特性之FunctionalInterface 一、概述 FunctionInterface函数接口是java8一个非常重要的新特性,它是一种指示性的类型注解,用于指示接口类型声明是由Java语言规范定义的功能接口。 从概念上讲,函数接口只有一个抽象方法。因为默认方法有一个实现,所以它们不是抽的。如果接口声明一个抽象方法覆盖Object对象的一个公共方法,则该方法也不计入接口的抽象方法计数,因为接口的任何实现都将具有来自Object对象或其他地方的实现。 请注意,可以使用lambda表达式、方法引用或构... 阅读详情

Supplier<T>为函数式接口 不接受参数返回一个值

public class SupplierTest {

	public static void main(String[] args) {
		
		SupplierTest test = new SupplierTest();
		
		Person person = new Person("zhangshan","1");
		
		//以下等价
		//1.
		Supplier<Person> supplier = ()->{
			return person;
		};
		Person person1 = test.getPerson(supplier);
		
		//2.
		Person person2 = test.getPerson(()->person);

	}
	
	//Supplier<T>为函数式接口 不接受参数返回一个值
	public Person getPerson(Supplier<Person> supplier) {
		return supplier.get();
	}
}

Function为函数式接口 输入一个参数返回一个参数

public class FunctionTest {

	public static void main(String[] args) {
		FunctionTest function = new FunctionTest();
		
		// 2 * 2
		System.out.println(function.compute(2,value -> value*2)); //4
		
		// (2 ^ 2) * 3
		System.out.println(function.compute2(2,value -> value*3, value -> value*value)); //12
		
		// (2 * 3) ^ 2
		System.out.println(function.compute3(2,value -> value*3, value -> value*value)); //36
		
		// 1 * 2
		System.out.println(function.compute4(1, 2, (v1,v2) -> v1 * v2)); //2
		
		// (1 * 2) * 2
		System.out.println(function.compute5(1, 2, (v1,v2) -> v1 * v2, v -> v*2)); //4
		
		// 1 * 2
		System.out.println(function.compute6(1, 2, (v1,v2) -> v1 * v2)); //2
	}
	
	//Function为函数式接口 输入一个参数返回一个参数
	//Function<T, R> T为入参类型 R为出参类型  
	public int compute(int a, Function<Integer, Integer> function) {
		return function.apply(a);
	}

	//函数组合
	public int compute2(int a, Function<Integer, Integer> f1, Function<Integer, Integer> f2) {
		//f2 -> f1 f2执行后执行f1 f2执行的结果为f1的入参
		return f1.compose(f2).apply(a);
	}
	
	public int compute3(int a, Function<Integer, Integer> function, Function<Integer, Integer> function2) {
		//f1 -> f2 f1执行后执行f2 f1执行的结果为f2的入参
		return function.andThen(function2).apply(a);
	}
	
	//BiFunction为函数式接口 输入两个参数返回一个参数
	//BiFunction<T, U, R> T为第一个参数类型 U为第二个参数类型 R为返回值的类型
	public int compute4(int a,int b,BiFunction<Integer,Integer,Integer> function) {
		return function.apply(a, b);
	}
	
	//BiFunction与Function组合使用
	public int compute5(int a,int b,BiFunction<Integer,Integer,Integer> biFunction,Function<Integer,Integer> function) {
		//biFunction -> function 执行biFunction后返回的结果作为function的入参
		return biFunction.andThen(function).apply(a, b);
	}
	
	//BinaryOperator为BiFunction的特殊情况 继承与BiFunction<T,T,T>
	public int compute6(Integer a,Integer b, BinaryOperator<Integer> binaryOperator) {
		return binaryOperator.apply(a, b);
	}
}

Consumer<T>为函数式接口 接收一个参数不返回值

public class ConsumerTest {

	public static void main(String[] args) {
		
		ConsumerTest test = new ConsumerTest();
		
		Person p1 = new Person("zhangsan","男");
		
		//将输入的person的sex属性改为女
		test.consume(p1, i -> i.setSex("女"));
		
		System.out.println(p1); //zhangsan 女

	}
	
	//Consumer<T>为函数式接口 接收一个参数不返回值
	public void consume(Person i, Consumer<Person> consumer) {
		consumer.accept(i);
	}
}

Predicate<T> 断言 传入值返回一个boolean值 通常传入一个判断条件

public class PredicateTest {

	public static void main(String[] args) {
		
		PredicateTest test = new PredicateTest();
		
		List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9);
		
		//传入条件为 值小于5为真
		test.getInt(list, value-> value < 5);
		
	}
	
	//Predicate<T> 断言 传入值返回一个boolean值 通常传入一个判断条件
	public void getInt(List<Integer> list,Predicate<Integer> predicate) {
		//遍历数组将符合predicate的值打印出来
		list.forEach(i -> {
			if(predicate.test(i)) {
				System.out.println(i); // 1 2 3 4
			}
		});
		
	}

}

java8 引入Optional<T>去解决空指针异常的问题

public class OptionalTest {

	public static void main(String[] args) {

		//java8 引入Optional<T>去解决空指针异常的问题
		//1.Optional的声明 创建一个Optional包装的字符串类型数据
		Optional<String> optional = Optional.of("hello world");
		//optional.isPresent()判断optional是否存在 再通过optional.get()获取到optional内的对象
		//但这种方式是不推荐的 是面向对象编程的思想
		if(optional.isPresent()) System.out.println(optional.get()); //hello world
		//推荐使用函数式编程
		optional.ifPresent(value -> System.out.println(value)); //hello world

		Company company = new Company();
		
		Person p1 = new Person("zhangsan","1");
		Person p2 = new Person("lishi","1");
		
		company.setName("Apple");
		company.setPersonList(Arrays.asList(p1,p2));
		
		Optional<Company> companyOptional = Optional.ofNullable(company);
		
		companyOptional.ifPresent(com -> com.getPersonList().stream().forEach(System.out::println)); //zhangsan 1  lishi 1
		
		company.setPersonList(null);
		
		//map映射 接收Founction函数 接收一个参数返回一个值
		//orElse方法当为空时执行
		List<Person> personList = companyOptional.map(com -> com.getPersonList()).orElse(Collections.emptyList());
		
		String name = companyOptional.map(com -> com.getName()).orElse("");
		
		System.out.println(personList);
		
		System.out.println(name);
		
	}
}

云计算系统等保测评对象和指标选取 参考GBT22239-2019《基本要求》附录D 云计算应用场景说明。简要理解下图,主要是云计算系统安全保护责任分担原则和云服务模式适用性原则,指导后续的测评对象和指标选取。 阅读详情

相关推荐

浪涌电流测试仪的工作原理

浪涌电流脉冲形成的开始由同步电路 13 确定,该同步电路 13 发送命令以打开和第二开关 10 和 11,向发生器 14 发送控制命令以生成被测半导体器件 5 的控制信号和参考信号整形器 9 的触发脉冲。电流源的功率输出并联连接,以对流经被测半导体样品的电流求和。此外,使用数字控制扩展了测试仪的功能,能够产生各种形状的电流脉冲,例如梯形电流脉冲,以估计被测晶闸管的导通状态扩展时间。由于晶体管3的栅极是连接的,并且平衡电阻4包含在晶体管3的源中,因此通过每个晶体管3的电流脉冲大致相同,并重复参考信号的形状。

Jesse0257的博客 1255

JDK8新特性

JDK8是Java升级变化最大的一个版本,JDK8引入很多新的写法,比如函数式接口、Lambda表达式、Stream函数式操作流元素集合、接口的默认方法、接口的静态方法等。JDK8是Java升级变化最大的一个版本,JDK8引入很多新的写法,比如函数式接口、Lambda表达式、Stream函数式操作流元素集合、接口的默认方法、接口的静态方法等。

专题一:Labview表格控件 及 应用(三)在表格中插入一行数据

专题一:Labview表格控件 及 应用(三) 在表格中插入一行数据 最近一段时间,做试验台上位机编程,老是用到表格控件,这几天抽时间专门写一个表格控件的专题。有用到的朋友可以参考一下。 今天接着讲一下,表格控件的数据插入,和相关的操作 1.表格控件的数据插入原理: 表格控件是一个 2D 字符串数组。 在表格插入一行,就是在2D数组插入一行。 行、列插入类似** 以下以成绩录入为例说明 2.1 不要表头直接插入 知识点1:创建数组:把数学,语文,英语三个数值,连成一个一位数组(数值型)。 知

Labview十年工控_702老师的博客 1万+

【Java】Jdk8函数接口Supplier、Function、Predicate、Consumer、BiFunction、BiPredicate、BiConsumer

Supplier、Function、Predicate、Consumer、BiFunction、BiPredicate、BiConsumer是Java函数式接口的一部分,它们用于定义不同类型的函数,从而在函数式编程中提供了更灵活的方式来处理数据。Supplier:表示一个供应商,它不接受任何参数,但返回一个结果。它的抽象方法为T get(),用于获取一个结果。Function:表示一个函数,它接受一个参数并返回一个结果。它的抽象方法为,用于将输入参数转换为输出结果。

zxcyxg123的博客 2309

全网最新首发纯干货:微信数据库表结构完整分析(一)

找不到微信DB表结构说明?找不到具体字段的解释?来这里,全网最完整版!!!

killghosts的博客 4926

【深度学习】通俗易懂讲解循环神经网络LSTM

目录 1、循环神经网络(Recurrent Neural Networks) 2、长依赖存在的问题 3、LSTM 网络 4、LSTMs的核心思想 5、一步一步理解LSTM 6、LSTM的变种 7、总结 1、循环神经网络(Recurrent Neural Networks) 人对一个问题的思考不会完全从头开始。比如你在阅读本片文章的时,你会根据之前理解过的信息来理解下面看到的文字。...

Nieson2012的专栏 2729

函数编程-Supplier

文章目录说明案例参考 说明 Supplier 接口是一个函数,该函数允许在调用时扩展,即运行结果可以作为另一个常规方法的乳参。 和Consumer 的区别在于,Consumer是先定义了如何处理入参数,然后未来谁都可以调用。 相比之下,Consumer 适合没有返回值的情况。 Consumer 是 我处理完,把别的函数作为入参数然后把我的处理结果传入这个函数。 Supplier 是我处理,别人调用。 案例 import java.util.function.Supplier; /** * @Title:

༺ bestcxx的专栏 ༻ 490

StarUML最新版汉化与破解二合一教程:5分钟搞定永久使用

本文提供StarUML最新版的高效使用指南,涵盖从安装到深度定制的全流程优化方案。包括软件获取最佳实践、界面个性化设置、核心建模技巧、团队协作策略及性能优化建议,帮助架构师和开发团队提升UML建模效率。特别推荐版本控制集成和文档自动化输出方案,适用于各类规模的项目开发。

weixin_42530732的博客 451

Java8中的函数式接口Supplier、Consumer、BiConsumer详解

函数式编程是JDK1.8的新特性,函数式接口是函数式编程主要的体现,我们可以借助函数接口在函数调用时使用lambda表达式。 一、什么是函数式接口? 函数式接口是java8中新加入的一批接口,他们由@FutionalInterface注解标记的接口,我们可以在rt.jar包下的java.util.function包里找到有很多函数式接口,比如常用的函数式接口有Function、Supplier、consumer和Prdicate等。 我们可以发现,函...

Dream_it_possible!的博客 9323

AJ-Report开源数据大屏存在远程命令执行漏洞

该平台可以通过post方式在validationRules参数对应值中进行命令执行,可以获得服务器权限,登陆管理后台接管大屏。如果被攻击者利用,危害后果十分严重。

swordheart的博客 387

UG/NX二次开发实例流程样例(nx1980+vs2019)

以上就是基本操作了,下面进入界面开发流程,nx1980的界面开发操作,也需要在块UI界面编辑器中操作,很多教程都没有讲解这一点,尤其是如何进入块UI界面编辑器,那么我在这里详细说明一下步骤。》,这一篇文章我们将详细讲述,如何开发一个具体的功能——根据用户输入的数据,在特定的点上创建一个指定大小的立方体。可以将文件保存当桌面,笔者保存在桌面的create_block目录中了,如下图所示,可以发现生成了三个文件。4.在新建模型完成后,我们准备创建交互UI,按照下图所示的顺序,找到块UI界面编辑器,。

秋月的私语 1万+

【JDK 8-函数式编程】4.4 Supplier

一、Supplier 接口 二、实战 Stage 1: 创建 Student 类 Stage 2: 创建方法 Stage 3: 调用方法 Stage 4: 执行结果

ladymorgana的博客 408

让 Claude Code 接管 SAP 事务流, 用 Python 和 SAP GUI Scripting 做一个真正能干活的 AI Agent

摘要:SAP系统自动化面临的核心瓶颈在于繁琐的GUI操作而非分析能力不足。通过整合Claude AI、Python和SAP GUI Scripting技术,可构建能直接操作SAP界面的智能代理。该方案利用SAP官方提供的脚本接口,实现事务码执行、界面导航、数据提取等自动化操作,特别适用于DMLT过账引擎等复杂错误分析场景。相比传统SQL导出方案,这种GUI级自动化能处理树控件、ALV表格等复杂界面元素,且无需额外API开发,直接在现有SAP GUI会话上工作,在保持原有权限体系的同时显著提升效率。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 321

JDK8新特性02:常用函数式接口

JDK8新特性02:常用函数式接口:Function和BiFunction`Function`接口:单输入单输出函数`Function`接口的意义`Function`的串联: `compose()`,`andThen()``BiFunction`接口:双输入单输出函数`BiFunction`接口的意义`BiFunction`与`Function`的串联:`andThen()` Function接口...

ncepu_Chen的博客 580

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

JDK8 提供的标准函数接口

《Effective Java》 第44条:坚持使用标准的函数接口 一、6个基本函数接口 java.util.function包下共有43个接口。别指望能全部记住它们,但是如果能记住其中6个基本接口,必要时就可以推断出其余接口了。 基础接口作用于对象引用类型:【6】 UuaryOperator、BinaryOperator接口代表其结果与参数类型一致的函数。 Predicate接口代表带有一个参...

CrazyTiger的博客 588

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Java中的函数式编程(二)函数式接口Functional Interface

写在前面 前面说过,判断一门语言是否支持函数式编程,一个重要的判断标准就是:它是否将函数看做是“第一等公民(first-class citizens)”。 函数是“第一等公民”,意味着函数和其它数据类型具备同等的地位——可以赋值给某个变量,可以作为另一个函数的参数,也可以作为另一个函数的返回值。 Java 8是通过函数式接口,赋予了函数“第一等公民”的特性。 本文将详细介绍Java 8中的函数式接口。 本文的示例代码可从gitee上获取: https://gitee.com/cnmemset/

anyuanwai的博客 4717

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

JDK8内置的核心函数式接口

JDK8内置的四大核心函数式接口1、消费型接口2、供给型接口3、函数式接口4、函数式接口5、其它函数接口 1、消费型接口 Conusmer<T>: 消费型接口----对象类型为T的对象应用操作,包含方法: void accept(T t); @Test public void test13(){ ConsumerInter("我是消费性接口...

yihang250的博客 368

Java8常用函数式接口整理

首先我们要明白几个概念,函数式接口、Lambda表达式、高阶函数。 函数式接口: 在Java中函数式接口的定义,就是在一个接口中只有一个抽象方法那么这个接口就是函数式接口。但是不包括默认方法(后续有讲解) 、静态方法和与Object类中的重名方法。 Lambda表达式: 写法: 参数 箭头符号 方法体, (Object param1,Object param2) -> {sout(param1+param2);}; , param1 -> {sout(param1+param2);}

weixin_43939924的博客 389

42JDK1.8新特性【函数式接口、Stream】

1.函数式接口 ​ 方法、构造方法和数组引用 2.Stream ​ 创建Stream ​ 中间操作–筛选与切片、映射 3.引入单元测试

gangain的博客 1090

Java8 新特性 函数式接口

摘要: Java8在使用Lambda时,需要函数式接口的声明。如果每次使用Lambda表达式都自己编写函数式接口,那就违背了Lambda表达式设计的初衷——更加简洁的书写代码,也不利于新特性的推广,于是JDK的设计人员内置了四大核心函数式接口。 消费型接口Consumer 供给型接口Supplier 函数型接口Function #

随-记的专栏 2144

Lambda -- 04JDK8函数包

JDK8新增加了一个包,java.util.function,这个包下所有的接口都是函数式接口,都是为了引入lambda表达式而设计的。 Lambda表达式的一般用法:作为一个《行为值》对象,当作实参传入某个方法。   Lambda表达式的入参:单入参 作用 函数式接口 抽象方法 Lambda表达式 方法签名 Lambda形态 ...

mmlz00的博客 432

JAVA8学习2-函数式接口

2 函数式接口 2.1 主要信息: Note that instances of functional interfaces can be created with lambda expressions, method references, or constructor references.(重点) an interface declares an abstract method overr...

z_yemu的博客 334

吃透 Java Function 接口,搞定 99% 的 Stream 场景

时至今日,Java 版本已经迭代至 Java 26,带来了虚拟线程、模式匹配、Record、密封类等大量现代化新特性,但 Java8 依旧是 Java 生态最核心、最经典的里程碑版本,没有之一。而 Java8 最具颠覆性、且至今仍贯穿所有项目、高频日常开发的核心革新,必然是函数式编程体系。

编程点滴 402

java8实战读书笔记:Lambda表达式语法与函数式编程接口

学习视频:大厂面试真题:[外链图片转存中…(img-EMBGTtkT-1711746265413)][外链图片转存中…(img-GQzv7GYT-1711746265414)]既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新。

2401_83739727的博客 742

关于函数式接口的学习

常用函数式接口 JDK 8 中重要的函数接 接口 参数 返回 中文 示例 Supplier None T 提供者 工厂方法创建对象 ​ Consumer T void 消费者 输出一个值 ​ Predicate T boolean 谓语,顾名思义,中文中的‘是’与‘不是’是中文语法的谓语 ​ Function T R 函数 获得某个对象的名字 ​ BinaryOperator (T, T) T 二元操作符,二元(就是数学里二元一次方程那个二元,

Improvement_的博客 260

java8 函数式接口简介

在java8中,lambda表达式所用的接口,必须是函数式接口; 函数式接口的定义:接口中只有一个抽象方法的接口,称为函数式接口; 可以使用@FunctionalInterface注解修饰,对该接口做检查;如果接口里,有多个抽象类,使用该注解,会有语法错误。 在java8中的函数式接口,有很多,比说,无参无返回值的(Runnable接口),有一个参数,无返回值的(Consumer),有多个参...

鸭鸭的博客 1万+
上一篇: JDK8使用java.time包简化开发者处理时间类型的数据常用方法
下一篇: Java8使用list.stream操作元素的基本方法
等风来_aa
博客等级 码龄9年 6粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值