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. 协程最大的优势就是协程极高的执行效率.因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协程的 ...
随机推荐
- springMVC特点与优势
1 SpringMVC和Struts2的优略分析 (面试) 共同点: 它们都是表现层框架,都是基于MVC模型编写的. 它们的底层都离不开原始ServletAPI(HttpServletRequest. ...
- Cocos2d-js 游戏切后台和返回游戏,系统监听事件
在日常游戏开发中,我们会发现,实时类操作的游戏,在模拟器中切后台,然后切回游戏,会出现很多异常. 很幸运,Cocos官方已经为我们预留了接口 1 LogicGame.addSystemListener ...
- 解决win10的wifi打不开或无法搜索到周围wifi的问题
今天笔者遇到了一个比较奇葩的问题,就是笔记本电脑的wifi打不开了,即使打开了也是搜索不到周围的wifi的.这个问题一开始笔者没有发现,因为在暑假期间都是使用笔记本连接自己的手机热点进行上网的.然而暑 ...
- MySQL 8.0.32 InnoDB ReplicaSet 配置和手动切换
1.环境准备 主库:192.168.137.4 mytest3 从库:192.168.137.5 mytest4 MySQL: 8.0.32 2.配置 ReplicaSet 实例 启动 mysql s ...
- ElasticSearch之Health API
查看当前集群全部健康指标的信息,执行如下命令: curl -X GET "https://localhost:9200/_health_report?pretty" --cacer ...
- 简单几行实现sliver上线提醒
准备魔改sliver去掉一些特征什么的,这里记录一下最简单实现上线消息通过企业微信机器人提醒的方式,这很简单也有很多不足还需要接着改的 protobuf中对消息Beacon和Session的定义如下, ...
- Plant-Earth-wp
Earth 信息收集 开放了80,443 只能访问到443,试了试msf里面frado的远古rce都不成功.然后注意到有域名解析 添加到hosts里面再访问,当前页面有几串密文,经尝试在message ...
- 设置CentOS7使用代理服务器上网
用三种方法设置CentOS7使用代理服务器上网 https://zhangyujia.cn/?p=1206 https://www.cnblogs.com/a-du/p/8964048.html 一. ...
- CIDR技术划分和计算
CIDR:无类域间路由 由于早期的IP地址的划分会浪费太多的IP地址,所以,现在都是用CIDR表示法,为此引入了子网掩码的概念,即网络位的个数可以任意指定.该方法兼容早期的IP划分方法. CIDR表示 ...
- 2023-08-28:用go语言编写。给你一个正整数数组nums, 同时给你一个长度为 m 的整数数组 queries。 第 i 个查询中,你需要将 nums 中所有元素变成 queries[i] 。
2023-08-28:用go语言编写.给你一个正整数数组nums, 同时给你一个长度为 m 的整数数组 queries. 第 i 个查询中,你需要将 nums 中所有元素变成 queries[i] . ...