函数式接口Consumer、BiConsumer、Supplier、Predicate、Function、BiFunction

函数式接口Consumer、BiConsumer、Supplier、Predicate、Function、BiFunction

1.Consumer

Java Consumer接口来自Java 8中引入的 java.util.function包。
Consumer是一个功能接口,用来作为lambda表达式或方法引用的任务目标(传递一个参数执行指定的方法)。

Consumer的功能接口是一个接受单一参数并且不返回任何结果的操作。必要时,"结果"可以存在在集合里面

Consumer的功能方法是accept(T t)。

Consumer具有以下方法。

  1. accept : 这是Consumer功能接口的功能方法。accept 方法对给定的参数进行这一操作。
  2. andThen : 此方法返回一个组合的Consumer,该Consumer先执行原始的Consumer操作,然后按照从左到右的顺序执行给定的andThen操作

示例

import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;public class Test0807 {public static void main(String[] args) {Consumer<Integer> print = i -> System.out.print(i);//1print.accept(1);System.out.println("----------------->");List<Integer> list = Arrays.asList(1, 2, 3, 4);//集合的每个元素乘以5Consumer<List<Integer>> change=i->{for (int j = 0; j < i.size(); j++) {i.set(j,i.get(j)*5);}};//打印每个元素Consumer<List<Integer>> print1=i->{for (int j = 0; j < i.size(); j++) {System.out.print(i.get(j)+" ");}};//每个先乘以5之后再打印//5 10 15 20 change.andThen(print1).accept(list);}
}

实例使用

public class Test0807 {public static void main(String[] args) {List<Integer> list = Stream.of(1, 2, 3, 4).collect(Collectors.toList());list.forEach(i-> System.out.println(i));}

2.BiConsumer

Java BiConsumer接口来自Java 8中引入的 java.util.function包。
BiConsumer是一个功能接口,用来作为lambda表达式或方法引用的任务目标(传递两个参数执行指定的方法)。

BiConsumer的功能接口是一个接受两个参数并且不返回任何结果的操作。

BiConsumer的功能方法是accept(T t, U u)。

BiConsumer具有以下方法。

  1. accept : 这是Consumer功能接口的功能方法。accept 方法对给定的参数进行这一操作。
  2. andThen : 此方法返回一个组合的BiConsumer,该BiConsumer先执行原始的BiConsumer操作,然后按照从左到右的顺序执行给定的andThen操作

示例

import com.google.common.collect.Maps;import java.util.Map;
import java.util.function.BiConsumer;public class Test0807 {public static void main(String[] args) {BiConsumer<String,Integer> print = (K,V) -> System.out.println(K+":"+V);print.accept("1",2);System.out.println("----------------->");Map<String,Integer> map = Maps.newLinkedHashMap();for (int i = 0; i < 10; i++) {map.put(i+"",i);}//打印key拼接aBiConsumer<String,Integer> print1=(K,V)->{System.out.println("keyChange--->"+K.concat("a")+":"+V);};//打印value乘以2BiConsumer<String,Integer> print2=(K,V)->{System.out.println("valueChange--->"+K+":"+V*2);};//打印key拼接a后打印value乘以2for (Map.Entry<String, Integer> entry : map.entrySet()) {print1.andThen(print2).accept(entry.getKey(), entry.getValue());}}
}

实际使用

import java.util.HashMap;
import java.util.Map;public class Test0807 {public static void main(String[] args) {Map<Integer,String> map=new HashMap<>();map.put(1,"a");map.put(2,"b");map.put(3,"c");map.put(4,"d");map.forEach((k,v)->{System.out.println(k+":"+v);});}
}

3.Supplier

Java Supplier接口来自Java 8中引入的 java.util.function包。
Supplier是一个功能接口,代表结果的提供者。

Supplier的功能接口是不需要接受参数并且获取结果的操作。

Supplier的功能方法是get()

示例

import com.google.common.collect.Lists;import java.util.List;
import java.util.Random;
import java.util.function.Supplier;public class Test0807 {public static void main(String[] args) {Supplier<Integer> supplier=()->new Random().nextInt(10)+1;List<Integer> list = Lists.newArrayList();for (int i = 0; i < 10; i++) {list.add(supplier.get());}list.forEach(i-> System.out.println(i));}
}

实际使用

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;public class Test0807 {public static void main(String[] args) {Map<Integer,String> map=new HashMap<>();map.put(1,"a");map.put(2,"b");map.put(3,"c");map.put(4,"d");ArrayList<Map.Entry<Integer, String>> collect = map.entrySet().stream().collect(Collectors.toCollection(() -> new ArrayList<>()));//等价于//ArrayList<Map.Entry<Integer, String>> collect = map.entrySet().stream().collect(Collectors.toCollection(ArrayList::new));System.out.println("collect = " + collect);}
}

4.Predicate

Java Predicate接口来自Java 8中引入的 java.util.function包。

Predicate是一个返回值布尔值的函数。

方法名作用
test(T t)判断对象t是否满足条件,满足返回true,不满足返回false
and(Predicate<? super T> other)判断对象t是否同时满足当前条件以及other条件,满足返回true,不满足返回false,相当于短路与&&
negate()对test(T t)的结果取反
or(Predicate<? super T> other)判断对象t是否满足当前条件或者满足other条件,满足返回true,不满足返回false,相当于短路或||
isEqual(Object targetRef)判断当前对象是否与对象targetRef属性值相等,相当于 Objects.equals(Object a, Object b)

示例:

import lombok.Data;
import lombok.experimental.Accessors;
import org.apache.commons.lang3.StringUtils;import java.util.function.Predicate;public class Test0807 {public static void main(String[] args) {Stu stu1 = new Stu().setAge(20).setName("张三").setSex("男");//年龄是否大于20Predicate<Stu> condition1=i->i.getAge()>20;//是否性别是女Predicate<Stu> condition2=i-> StringUtils.equals("女",i.getSex());//判断stu1的年龄是否大于20boolean test1 = condition1.test(stu1);System.out.println("test1 = " + test1);//false//negate对结果取反boolean test11 = condition1.negate().test(stu1);System.out.println("test11 = " + test11);//false//判断stu1是否性别是女boolean test2 = condition2.test(stu1);System.out.println("test2 = " + test2);//false//判断stu1是否同时年龄大于20与性别是女stu1.setAge(25);boolean test3 = condition1.and(condition2).test(stu1);System.out.println("test3 = " + test3);//false//判断stu1是否年龄大于20或者性别是女boolean test4 = condition1.or(condition2).test(stu1);System.out.println("test4 = " + test4);//true//判断stu与stu1是否equalsStu stu = new Stu().setSex("男").setAge(25).setName("张三");boolean test5 = Predicate.isEqual(stu).test(stu1);System.out.println("test5 = " + test5);//true}
}@Data
@Accessors(chain = true)
class Stu{private String name;private Integer age;private String sex;
}

实际使用

import com.google.common.collect.Lists;import java.util.List;public class Test0807 {public static void main(String[] args) {List<Integer> list = Lists.newArrayList();for (int i = 0; i < 10; i++) {list.add(i);}//输出偶数list.stream().filter(i -> i % 2 == 0).forEach(i-> System.out.println(i));}
}

5.Function

Java Function接口来自Java 8中引入的 java.util.function包。

Function是一个功能接口,用来作为lambda表达式或方法引用的任务目标(传递一个参数执行指定的方法)。

Function的功能接口是一个接受单一参数并且返回单一结果的操作。

Function的功能方法是R apply(T t);

Function具有以下方法

方法名作用
R apply(T t);对传入的参数t进行函数运算后返回R
compose(Function<? super V, ? extends T> before)先对传入的参数进行before函数运算,然后在before函数运算基础上面再进行当前函数运算
andThen(Function<? super R, ? extends V> after)先对传入的参数进行当前函数运算,然后在当前函数运算基础上面再进行after函数运算
identity()输入什么就返回什么

示例:

public class Test0807 {public static void main(String[] args) {Function<Integer,Integer> multi=i-> i*10;Integer result = multi.apply(10);System.out.println("result = " + result);Function<Integer,Integer> add=i -> i + 10;//先加10再乘以10result= multi.compose(add).apply(10);//(10+10)*10System.out.println("result = " + result);//先乘以10再加10result= multi.andThen(add).apply(10);//10*20+10System.out.println("result = " + result);}
}

实际使用

import com.google.common.collect.Lists;import java.util.List;public class Test0807 {public static void main(String[] args) {List<Integer> list = Lists.newArrayList();for (int i = 0; i < 10; i++) {list.add(i);}list.stream().map(i -> i * 2).forEach(i-> System.out.println(i));}
}

6.BiFunction

Java BiFunction接口来自Java 8中引入的 java.util.function包。

BiFunction是一个功能接口,用来作为lambda表达式或方法引用的任务目标(传递两个个参数执行指定的方法)。

BiFunction的功能接口是一个接受两个参数并且返回单一结果的操作。

BiFunction的功能方法是R apply(T t, U u);

BiFunction具有以下方法

  1. apply: 这是BiFunction功能接口的功能方法。apply方法对给定的参数进行这一操作。
  2. andThen : 此方法返回一个组合的BiFunction,该BiFunction先执行原始的BiFunctionr操作,然后按照从左到右的顺序执行给定的andThen操作

示例:

import java.util.function.BiFunction;public class Test0807 {public static void main(String[] args) {//value*10BiFunction<String,Integer,Integer> biFunction1=(K,V)->{V=V*10;return V;};Integer a = biFunction1.apply("a", 10);System.out.println("a = " + a);//10//value+10Integer a1 = biFunction1.andThen(i -> i + 10).apply("a", 10);//10*10+10System.out.println("a1 = " + a1);//key大写BiFunction<String,Integer,String> biFunction2=(K,V)->{K=K.toUpperCase();return K;};String a2 = biFunction2.apply("a", 10);System.out.println("a2 = " + a2);//A//拼接本身String a3 = biFunction2.andThen(i -> i.concat(i)).apply("a", 10);System.out.println("a3 = " + a3);//AA}
}

实际使用

import java.util.HashMap;
import java.util.Map;public class Test0807 {public static void main(String[] args) {Map<Integer,String> map=new HashMap<>();map.put(1,"a");map.put(2,"b");map.put(3,"c");map.put(4,"d");//value大写map.keySet().forEach(i->{map.computeIfPresent(i, (K, V) -> V.toUpperCase());});map.forEach((K,V)-> System.out.println(K+":"+V));}
}

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

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

相关文章

opencv基础48-绘制图像轮廓并切割示例-cv2.drawContours()

绘制图像轮廓&#xff1a;drawContours函数 在 OpenCV 中&#xff0c;可以使用函数 cv2.drawContours()绘制图像轮廓。该函数的语法格式是&#xff1a; imagecv2.drawContours( image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset]]…

c基础扫雷

和三子棋一样&#xff0c;主函数先设计游戏菜单界面&#xff0c;这里就不做展示了。 初始化棋盘 初级扫雷大小为9*9的棋盘&#xff0c;但排雷是周围一圈进行排雷(8格)&#xff0c;而边界可能会越界。数组扩大了一圈,行和列都加了2&#xff0c;所以我们用一个11*11的数组来初始化…

计算机科技历史纵横:8月6日的十大里程碑

计算机科技历史纵横&#xff1a;8月6日的十大里程碑 目录 引言1951年&#xff1a;EDSAC电脑完成第一个实际计算任务1964年&#xff1a;IBM发布System/360系列1973年&#xff1a;Xerox PARC开发出第一台个人电脑Xerox Alto1976年&#xff1a;Apple发布Apple I电脑1981年&#…

UDS诊断笔记

文章目录 常见缩写简介UDS寻址模式1. 物理寻址&#xff08;点对点、一对一&#xff09;2. 功能寻址&#xff08;广播、一对多&#xff09;3. 功能寻址使用场景举例 UDS报文格式UDS协议栈网络层网络层功能网络层协议1. 单帧 SF&#xff08;Single Frame&#xff09;2. 首帧 FC&a…

教你一招:非计算机科班如何丝滑转码?

近年来&#xff0c;很多人想要从其他行业跳槽转入计算机领域。非计算机科班如何丝滑转码&#xff1f; 目录 一、确定方向 二、确定学习计划&#xff08;自学&#xff09; 三、学习 看到组里好多非科班姐妹决定转码之后&#xff0c;因为相关背景知识不足难以确定学习计划&am…

【机密计算-大厂有话说】微软 Open Enclave SDK

前言 机密计算是基于硬件支持的可信执行环境的&#xff0c;比如 Intel SGX 硬件技术上面的 enclave 以及 Arm Trustzone 上的 OT-TEE&#xff0c;不过这些异构的 TEE 之间差异还是蛮大的&#xff0c;所以亟需一种能够屏蔽 TEE 差异软件中间件或者 SDK&#xff0c;这就是本文将要…

JavaScript 中替换所有匹配项的自定义函数非正则表达式

引言 在 JavaScript 中&#xff0c;字符串替换是常见的操作之一。虽然 JavaScript 提供了一些内置的字符串方法来实现替换&#xff0c;比如 replace() 方法&#xff0c;但它只会替换第一个匹配到的项。如果我们想要替换所有匹配到的项&#xff0c;就需要自己编写一个函数。本文…

生成测试报告,在Unittest框架中就是简单

测试套件&#xff08;Test Suite&#xff09;是测试用例、测试套件或两者的集合&#xff0c;用于组装一组要运行的测试&#xff08;多个测试用例集合在一起&#xff09;。 &#xff08;1&#xff09;创建一个测试套件&#xff1a; import unittest suite unittest.TestSuite…

面向开发人员的 Spring Boot 最佳实践

Spring Boot是一种广泛使用且非常流行的企业级高性能框架。以下是一些最佳实践和一些技巧&#xff0c;您可以使用它们来改进 Spring Boot 应用程序并使其更加高效。这篇文章会有点长&#xff0c;完整读完文章需要一些时间。 正确的包装风格 正确的打包将有助于轻松理解代码和…

STL模板——vector详解

一、vector对象的定义和初始化方式 vector 中的数据类型 T 可以代表任何数据类型&#xff0c;如 int、string、class、vector&#xff08;构建多维数组&#xff09; 等&#xff0c;就像一个可以放下任何东西的容器&#xff0c;因此 vector 也常被称作容器。字符串类型 string …

ElasticSearch索引生命周期管理--DELETE

概要 ElasticSearch中的索引生命周期管理&#xff0c;也就是ilm&#xff08;Manage the index lifecycle&#xff09;,是指定了索引在不同周期下的处理策略。ilm 的对象是索引而不是索引中的数据。ilm 包括四个阶段&#xff1a;hot 、warm、cold和delete。hot、warm和cold表示…

【VUE】项目本地开启https访问模式(vite4)

在实际开发中&#xff0c;有时候需要项目以https形式进行页面访问/调试&#xff0c;下面介绍下非vue-cli创建的vue项目如何开启https 环境 vue: ^3.2.47vite: ^4.1.4 根据官方文档&#xff1a;开发服务器选项 | Vite 官方中文文档 ps&#xff1a;首次操作&#xff0c;不要被类…

Pyspark

2、DataFrame 2.1 介绍 在Spark语义中&#xff0c;DataFrame是一个分布式的行集合&#xff0c;可以想象为一个关系型数据库的表&#xff0c;或者一个带有列名的Excel表格。它和RDD一样&#xff0c;有这样一些特点&#xff1a; Immuatable&#xff1a;一旦RDD、DataFrame被创…

ssm+vue基于java的少儿编程网上报名系统源码和论文PPT

ssmvue基于java的少儿编程网上报名系统源码和论文PPT006 开发工具&#xff1a;idea 数据库mysql5.7(mysql5.7最佳) 数据库链接工具&#xff1a;navcat,小海豚等 开发技术&#xff1a;java ssm tomcat8.5 摘 要 在国家重视教育影响下&#xff0c;教育部门的密确配合下&#…

沐渥六门氮气柜技术参数详解

氮气柜是用来存储电子元器件、芯片、半导体器件、金属材料、电路板、精密仪器等物品的设备&#xff0c;通过充入氮气降低柜内湿度&#xff0c;达到防潮、防氧化、防静电、防锈和防霉效果。 六门氮气柜参数 1、容积&#xff1a;约1380L&#xff1b;外尺寸&#xff1a;W1200*D700…

一零六八、回顾MySQL关键字排序

一、 关键字书写顺序 select distinct from join on where group by having union &#xff08;all&#xff09; order by limit二、 关键字实际执行顺序 from on join where group by having select distinct union &#xff08;all&#xff09; order by limit个人理解&…

100G光模块的应用案例分析:电信、云计算和大数据领域

100G光模块是一种高速光模块&#xff0c;由于其高速率和低延迟的特性&#xff0c;在电信、云计算和大数据领域得到了广泛的应用。在本文中&#xff0c;我们将深入探讨100G光模块在这三个领域的应用案例。 一、电信领域 在电信领域&#xff0c;100G光模块被广泛用于构建高速通…

QT- QLineEdite设置自动补全功能,并修改自动补全的样式

#include <QApplication> #include <QLineEdit> #include <QCompleter> #include <QStringListModel> #include <QMainWindow>int main(int argc, char *argv[]) {QApplication app(argc, argv);// 创建一个字符串列表模型QStringListModel mode…

python流程控制语句学习笔记

if语句的使用 一、if判断语句介绍 if语句是用来进行判断的&#xff0c;其使用格式如下&#xff1a; if 要判断的条件: 条件成立时&#xff0c;要做的事情 demo1: age 30 print("------if判断开始------") if age > 18: print("我已经成年了") print…

HTML 元素中的name 属性

name 属性是 HTML 元素中常用的属性之一。它用于指定表单元素的名称&#xff0c;以便在提交表单时将其值与对应的键关联起来。 每个表单元素&#xff08;例如 <input>、<select> 和 <textarea>&#xff09;都可以具有一个 name 属性&#xff0c;该属性为元素…