场景:       
当我们在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函数的更多相关文章

  1. python学习笔记之迭代器和函数(第三天)

    一.collection系列: 1.counter计数器 如果counter(dict)是对字典的一个补充,如果counter(list)则是对列表的补充,初步测试对字典的值进行排序. ####### ...

  2. Java 8 函数接口详细教程

    ay = new byte[array.length]; for (int i = 0; i < array.length; i++) { transformedArray[i] = funct ...

  3. [源码分析] 消息队列 Kombu 之 Consumer

    [源码分析] 消息队列 Kombu 之 Consumer 目录 [源码分析] 消息队列 Kombu 之 Consumer 0x00 摘要 0x01 综述功能 0x02 示例代码 0x03 定义 3.1 ...

  4. 还不了解一下 Java 8 Predicate 函数接口

    同学你好,这里有一份你的未读代码,等你查收. 这篇文章属于 Java 8 教程(LTS)系列教程,点击阅读更多相关文章. Predicate 函数接口同之前介绍的 Function 接口一样,是一个函 ...

  5. Upgrading to Java 8——第二章 Method References(方法引用)

    概述 很多java 方法会使用函数式接口作为参数.例如,java.util.Arrays类中的一个sort方法,就接受一个Comparator接口,它就是一个函数式接口,sort方法的签名如下: pu ...

  6. JDK源码之String类解析

    一 概述 String由final修饰,是不可变类,即String对象也是不可变对象.这意味着当修改一个String对象的内容时,JVM不会改变原来的对象,而是生成一个新的String对象 主要考虑以 ...

  7. python学习笔记-(十四)进程&协程

    一. 进程 1. 多进程multiprocessing multiprocessing包是Python中的多进程管理包,是一个跨平台版本的多进程模块.与threading.Thread类似,它可以利用 ...

  8. day9-协程

    生产者和消费者模型: #!/usr/bin/env python #coding:utf8 import threading,Queue import time import random def p ...

  9. python yield用法举例说明

    1  yield基本用法 典型的例子: 斐波那契(Fibonacci)數列是一个非常简单的递归数列,除第一个和第二个数外,任意一个数都可由前两个数相加得到.1 2 3 5 8…… def fab(ma ...

  10. python--gevent协程及协程概念

    何为协程 协程,又称微线程.英文名Coroutine. 协程最大的优势就是协程极高的执行效率.因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协程的 ...

随机推荐

  1. Typora的安装与使用教程

    一.安装 1.下载 下载地址:Typora 官方中文站 二.安装 1.无脑下一步即可. 三.使用教程 1.Typora系统设置 一般导出使用PDF文件比较好,性价比比较高. 2.其他设置 以下所有设置 ...

  2. Tainted canvases may not be exported,视频帧截图跨域

    做原生相机拍照的时候遇见的有趣问题,视频流是上传到云服务器的在线链接,赋值到video的src上,然后使用canvas的drawImg方法去截取视频帧做照片,结果canvas报错视频跨域. 解决方案: ...

  3. 找到了!GitHub Copilot的最佳免费平替

    在如今这个人工智能高速发展的时代,每个行业都在被AI技术影响而改变.层出不穷的AI辅助工具,让我们看到了机器正在取代一部分基础的日常工作.对于我们开发者而言,当前最炙手可热的就是GitHub Copi ...

  4. 小傅哥自研插件,为开发提效80%,已经有8.1k安装量!

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 哈喽,大家好我是技术UP主小傅哥. 如果你担心维护成本和性能考量,不想使用 BeanUtils ...

  5. 华企盾DSC启动服务器提示“发生系统错误5”

    解决方法:没有管理员权限 导致,需要以管理员权限运行服务器安装包,覆盖安装一下

  6. android webview(外部浏览器)调起app

    最近写的项目中涉及外部浏览器以及项目webview中调起app,所以总结下,和大家分享下. 总的实现方法还是比较简单的, 1:在清单中注册 首先在AndroidManifest文件中,注册一个过滤器 ...

  7. 云上攻防--云服务&&对象存储(域名接管)&&弹性计算(元数据泄露)

    云上攻防--云服务&&对象存储(域名接管)&&弹性计算(元数据泄露) 对象存储 各个厂商对于对象存储的叫法不同,但是除了叫法基本没有其他区别. 对象存储各大云名词: 阿 ...

  8. 监控工具nmon使用方法

    https://blog.csdn.net/linabc123000/article/details/70833427

  9. 【Azure APIM】APIM 策略语句如何来设置多个Cookie值让浏览器保存

    问题描述 在APIM的 <return-response> 策略中,设置Cookie值,因为需要设置多个Cookie值,使用下面两种方式都只能保存一个Cookie值: 方式一:把多个coo ...

  10. Gateway:Spring Cloud API网关组件

    Gateway:Spring Cloud API网关组件 问题总结 API网关? Spring Cloud Gateway? GateWay的工作流程?(重点) Predicate断言? Filter ...