jdk1.8: Consumer函数
场景:
当我们在a方法中,需要把某些参数赋值给一个Integer类型的对象,而该对象只有在b方法才能赋值,那么我们可以在a方法中使用consumer记录我们要执行的操作,再把consumer作为参数传递到b方法执行
//Consumer<>方法
User user = new User("aa", "bb");
Consumer<User> function = uu -> uu.setName("uu"); //预定义的一个函数过程
function.accept(user); //用入参去执行预定义的函数过程
System.out.println(user); //Consumer<>方法
Consumer<Integer> consumer = num -> {
num++;
System.out.println("num="+num);//4
};
consumer.accept(3); // 2.andThen(Consumer<? super T> after)方法
// A.andThen(B).accept() 先执行consumer1表达式,再执行consumer2表达式。
Consumer<Integer> consumer1 = num -> {
num++;
System.out.println("consumer1="+num);//4
};
Consumer<Integer> consumer2 = i -> {
System.out.println("consumer2="+i);
};
consumer1.andThen(consumer2).accept(3);
2. 发布方法方法调用:
@Test
public void consumerTest() {
User user = User.builder().build();
UserPageDto userPageDto = new UserPageDto();
userPageDto.setUserName("张三");
userPageDto.setRole(2);
cosumerMethod(user, userPageDto, (x, y) -> BeanUtils.copyProperties(x, y)); //函数过程
cosumerMethod1(user, (x) -> System.out.println(x)); //函数过程
cosumerMethod1(user, System.out::println); //函数过程
cosumerMethod1(user, (x)->{
x.setName("yy");
x.setPrice(new BigDecimal(33));
x.setQty(33);
});
System.out.println(user.toString());
}
private void cosumerMethod1(User user, Consumer<User> x){
x.accept(user); //调用参数
}
private void cosumerMethod(User user, UserPageDto userPageDto, BiConsumer<UserPageDto,User> bc) {
bc.accept(userPageDto, user);
}
@Data
public class UserPageDto {
private String userName;
private Integer role;
}
// java8: Supplier
//以前创建对象每次都要new,但是Supplier相当于一个对象容器,只需要创建一次,下次需要用get方法从容器获取
Supplier<User> userSupplier = User::new;
User user = userSupplier.get();
user.setName("aa");
User user2 = userSupplier.get();
user2.setSerbian("bb");
System.out.println(user);
System.out.println(user2);
jdk1.8: Consumer函数的更多相关文章
- python学习笔记之迭代器和函数(第三天)
一.collection系列: 1.counter计数器 如果counter(dict)是对字典的一个补充,如果counter(list)则是对列表的补充,初步测试对字典的值进行排序. ####### ...
- Java 8 函数接口详细教程
ay = new byte[array.length]; for (int i = 0; i < array.length; i++) { transformedArray[i] = funct ...
- [源码分析] 消息队列 Kombu 之 Consumer
[源码分析] 消息队列 Kombu 之 Consumer 目录 [源码分析] 消息队列 Kombu 之 Consumer 0x00 摘要 0x01 综述功能 0x02 示例代码 0x03 定义 3.1 ...
- 还不了解一下 Java 8 Predicate 函数接口
同学你好,这里有一份你的未读代码,等你查收. 这篇文章属于 Java 8 教程(LTS)系列教程,点击阅读更多相关文章. Predicate 函数接口同之前介绍的 Function 接口一样,是一个函 ...
- Upgrading to Java 8——第二章 Method References(方法引用)
概述 很多java 方法会使用函数式接口作为参数.例如,java.util.Arrays类中的一个sort方法,就接受一个Comparator接口,它就是一个函数式接口,sort方法的签名如下: pu ...
- JDK源码之String类解析
一 概述 String由final修饰,是不可变类,即String对象也是不可变对象.这意味着当修改一个String对象的内容时,JVM不会改变原来的对象,而是生成一个新的String对象 主要考虑以 ...
- python学习笔记-(十四)进程&协程
一. 进程 1. 多进程multiprocessing multiprocessing包是Python中的多进程管理包,是一个跨平台版本的多进程模块.与threading.Thread类似,它可以利用 ...
- day9-协程
生产者和消费者模型: #!/usr/bin/env python #coding:utf8 import threading,Queue import time import random def p ...
- python yield用法举例说明
1 yield基本用法 典型的例子: 斐波那契(Fibonacci)數列是一个非常简单的递归数列,除第一个和第二个数外,任意一个数都可由前两个数相加得到.1 2 3 5 8…… def fab(ma ...
- python--gevent协程及协程概念
何为协程 协程,又称微线程.英文名Coroutine. 协程最大的优势就是协程极高的执行效率.因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协程的 ...
随机推荐
- 【Javaweb】六-servlet层
AdminServlet.jap @WebServlet("/AdminServlet") public class AdminServlet extends HttpServle ...
- Grid 拖拽布局实现
最近有个需求需要实现自定义首页布局,需要将屏幕按照 6 列 4 行进行等分成多个格子,然后将组件可拖拽对应格子进行渲染展示. 示例 对比一些已有的插件,发现想要实现产品的交互效果,没有现成可用的.本身 ...
- Netty源码学习7——netty是如何发送数据的
零丶引入 系列文章目录和关于我 经过<Netty源码学习4--服务端是处理新连接的&netty的reactor模式和<Netty源码学习5--服务端是如何读取数据的>,我们了 ...
- C++学习笔记四:变量与数据类型(布尔型与字符型)
今天来整理一下布尔型和字符型变量的基本使用方法1)布尔型变量1. 声明和初始化一个布尔类型的变量占据1 Byte空间,数值0代表false,其他非0数值代表true bool red_light {f ...
- 87 GB 模型种子,GPT-4 缩小版,超越ChatGPT3.5,多平台在线体验
瞬间爆火的Mixtral 8x7B 大家好,我是老章 最近风头最盛的大模型当属Mistral AI 发布的Mixtral 8x7B了,火爆程度压过Google的Gemini. 缘起是MistralAI ...
- 在arm架构的银河麒麟系统部署Nginx
以下是在arm架构的银河麒麟系统上部署Nginx的详细步骤: 1. 创建文件夹 首先,在合适的位置创建必要的文件夹.在本例中,我们将创建/opt/nginx和/usr/src/nginx两个文件夹. ...
- 一款基于.NET Core的快速开发框架、支持多种前端UI、内置代码生成器
前言 经常看到有小伙伴在技术群里问有没有什么好用且快速的开发框架推荐的,今天就给大家分享一款基于MIT License协议开源.免费的.NET Core快速开发框架.支持多种前端UI.内置代码生成器. ...
- Cesium被接入数字孪生系统后会发生怎样的改变?
众所周知,Cesium凭借其开源免费的特点一直垄断着整个三维GIS的生态系统,但是随着数字孪生技术的发展以及各项新需求的不断涌现,Cesium与数字孪生系统相结合的潜力也逐渐凸显. 一般而言,Cesi ...
- python tkinter 使用(八)
python tkinter 使用(八) 本文主要讲下tkinter库中的其他的一些模块,如simpleDialog,scrollerText等. 1: simpleDialog simpledial ...
- 前世今生:Kubernete 是如何火起来的?
本课时,我们就开始正式进入 Kubernetes 的学习,或许你已经听过或简单了解过 Kubernetes,它是一款由 Google 开源的容器编排管理工具,而我们想要深入地掌握 Kubernetes ...