场景:       
当我们在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. 【GIT】学习day01 | 内嵌git安装教程【外包杯】

    Git是一个开源的分布式版本控制系统,可以有效.高速地处理从很小到非常大的项目版本管理 第一步:下载Git 下载地址https://git-scm.com/downloads 如果出现下面这种情况无法 ...

  2. 用Python编写 2048 命令行小游戏

    本篇博文围绕使用Python开发热门游戏2048 GAME(命令行版本) 代码未做任何优化(原生且随意).全程以面向过程.MVC的设计思想为主.开发环境是Ubuntu系统下的Pycharm 2048是 ...

  3. 【WCH以太网接口系列芯片】基于CH395的组播请求(IGMP)

    在上一篇文章中,我们通过直连电脑测试了CH395在组播环境中进行数据的收发,但在实际的使用场景中更多的是将CH395接入局域网环境中.因此,我们需要使用到一个协议--IGMP(Internet Gro ...

  4. 【UniApp】-uni-app-CompositionAPI应用生命周期和页面生命周期

    前言 好,经过上个章节的介绍完毕之后,了解了一下 uni-app-OptionAPI应用生命周期和页面生命周期 那么了解完了uni-app-OptionAPI应用生命周期和页面生命周期之后,这篇文章来 ...

  5. C# 基础编程题集锦

    简单字符串加密 编写一个应用程序用来输入的字符串进行加密,对于字母字符串加密规则如下: 'a→d' 'b'→'e' 'w'→z' ...... x'→'a' 'y'→b' 'z→c' 'A'→'D' ...

  6. MySQL账号锁定与解锁

    MySQL提供了多种方法来锁定解锁账号,下面是几种常用的方法: 1.使用ALTER语句锁定账号 锁定账号: ALTER USER 'username'@'localhost' ACCOUNT LOCK ...

  7. 华企盾DSC在苹果电脑上加密文件不显示加密图标

    1.首先mac端暂时只支持在访达内显示加密图标,且新建的加密文件需要切换目录才可查看 2.检查DSCFinderSync进程是否启动,若没有启动重启一下DSC进程 3.若还没有显示直接重启系统的访达进 ...

  8. NetSuite 开发日记:解决导入 CSV 与 Excel 文件时中文乱码问题

    Backgroud 在使用SheetJS库导入带有中文的CSV文件时,中文被解析为了乱码 Analysis 乱码肯定是编码问题 确定CSV的编码,可使用VS Code.记事本来查看 修改CSV文件编码 ...

  9. ​3D 高斯点染简介

    3D 高斯点染技术由 3D Gaussian Splatting for Real-Time Radiance Field Rendering 一文首次提出.作为一种栅格化技术,3D 高斯点染可用于实 ...

  10. spring是否线程安全

    spring 管理的bean默认是单例的,可通过 scope 属性设置scope="singleton" 默认是单例,可修改为scope="prototype" ...