比如有场景:A类服务List集合传入到Consumer接口中,Consumer接口实现批量解析List,当解析一定数量后,回调A类中的方法,进行下一步操作(比如加入数据库)。

代码定义如下:

1、Test类:

public class Test {public static void main(String[] args) throws Exception {test();}public static void test() throws Exception {// 模拟数据List<User> userList = new ArrayList<>();for (int a = 0; a < 10000; a++) {User user = new User();user.setUsername("用户:" + a);userList.add(user);}Consumer<List<User>> consumer =uploadData -> importData(uploadData);// 调用B类new MyConsumer(consumer).handlerData(userList);}/*** 创建回调方法*/public static void importData(List<User> list) {// 插入到数据库中System.out.println("解析数量:" + list.size());}
}

2、MyConsumer类

public class MyConsumer<T> {/*** 传入解析数据的service对象*/public Consumer<List<T>> uploadService;public MyConsumer(Consumer<List<T>> uploadService) throws Exception {this.uploadService = uploadService;}/*** 处理数据*/public void handlerData(List<T> list) {// 模拟解析,每30条数据就进行回调List<T> dataList = new ArrayList<>();for (T t : list) {dataList.add(t);if (dataList.size() == 1000) {// 回调保存数据saveData(dataList);}}// 回调保存数据saveData(dataList);}/*** 回调保存数据** @param dataList*/private void saveData(List<T> dataList) {if (dataList.size() > 0) {uploadService.accept(dataList);dataList.clear();}}
}

效果:

3、处理逻辑:
Test类中,有一个List集合大小为10000,有一个解析类MyConsumer,负责对List数据进行解析操作,并且将解析的数据插入到数据库中,但是为了防止数据一次插入的数据过多需要分批次插入,所以MyConsumer负责解析,并且每解析1000条数据就回调Test类,由Test类负责插入数据到数据库中。

4、注意:
此处只是列举了,通过Consumer实现数据解析的回调,实际开发中还是存在其他的情况,一样可以使用到Consumer回调机制。

通过Consumer函数式接口,实现回调相关推荐

  1. [彻底理解]JDK1.8 函数式接口 Consumer Supplier 以及 JAVA新纪元 λ表达式的到来

    JDK1.8 函数式接口 Consumer & Supplier 以及 JAVA新纪元 λ表达式的到来 背景什么的被吞了,直接进入主题 函数式接口(定义自己百度,一大堆) 因为看了一些关于JD ...

  2. 函数式接口 lambda表达式 方法引用

    拉呱: 终于,学习jdk8的新特性了,初体验带给我的感觉真爽,代码精简的不行,可读性也很好,而且,spring5也是把jdk8的融入到血液里,总之一句话吧,说的打趣一点,学的时候自己难受,学完了写出来 ...

  3. java8 注解: @FunctionalInterface (函数式接口)

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. Java8提倡函数式编程,因而新增了一个函数式接口.函数式接口保证了函数式编程,同时也保证了能够兼容 ...

  4. 高级JAVA - 利用函数式接口实现通用的取并集/交集/差集

    package com.xing.dto;import com.xing.common.utils.XDataUtil; import lombok.Data;import java.util.Arr ...

  5. java新特性-函数式接口-作为方法参数-作为方法的返回值-常用函数式接口-Supplier-Consumer-Predicate-Function

    文章目录 函数式接口 概念 函数式接口作为方法参数 函数式接口作为方法的返回值 常用函数式接口 Supplier接口 常用函数式接口 Consumer 函数式接口之 Predicate接口 常用接口之 ...

  6. Java中的函数式接口

    函数式接口 1. 函数式接口 1.1 概述 如果说一个接口内有且只有一个方法,而且该方法是一个缺省属性为public abstract方法,该接口可以称之为是一个函数式接口.    自定义函数式接口, ...

  7. 常用的函数式接口FunctionInterface

    常见的四类函数式接口 Supplier 生产者, 返回一个指定类型的数据 有且只有一个方法T get();不需要参数,返回指定T类型数据 package com.qfedu.c_supplier;im ...

  8. Day 28 函数式接口

    Day 28 1. 函数式接口 1.1 概述 如果说一个接口只有一个方法,而且干方法是一个缺省属性为abstract方法,该接口称之为函数式接口.可以直接使用JDK1.8新特征,Lambda表达式来使 ...

  9. 奋斗在JAVA路上的随手记——函数式接口

    ​ 第一章 函数式接口 1.含义 A. 函数式接口是在Java语言当中"有且只有一个抽象方法的接口" B. 如果方法的参数是 函数式接口,那么在传递参数的时候,就可以写 Lambd ...

最新文章

  1. 2-4 js基础-事件对象小结
  2. msp430入门学习30
  3. HttpClient系列~StringContent与FormUrlEncodedContent
  4. 又翻车?苹果被揪出夸大iPhone续航时间:iPhone XR虚标51%
  5. mysql延迟注入br,实验3—SQL注入漏洞的攻击与防御(基于时间延迟的盲注)
  6. 动态调整linux分区大小,GParted 动态调整Linux分区大小
  7. springboot输出流到页面_Springboot如何使用Map将错误提示输出到页面
  8. 杭电ACM2000题
  9. Android HID触摸屏驱动怎么开发
  10. 涉及到各种场景-英语小记-最爱的一篇
  11. Lighttpd介绍
  12. 如何使用Better Zip软件的密码保护功能
  13. php 简明现代魔法,【转】WinCacheGrind配合XDebug分析PHP程序性能 — 简明现代魔法...
  14. c++复习——侯捷版
  15. html 中长单词换行问题
  16. 约翰霍普金斯大学计算机专业,约翰霍普金斯大学计算机专业排名第几?
  17. 用C#开发的一个通用的地铁换乘查询工具
  18. 磁力云盒,自动静默关注店铺
  19. Chrome插件开发-右键菜单开启页面编辑
  20. 微信的用户已退出是什么意思_秋天的第一杯奶茶是什么梗 微信朋友圈52元奶茶红包是什么意思...

热门文章

  1. java 原子性int_JAVA原子性操作
  2. 商场智慧消防栓远程监测项目
  3. st7735s SPI驱动显示图标
  4. yum安装ipPBX系统
  5. [WCN685X] WCN6856 WiFi 6E设置Open连接失败问题分析及解决方案
  6. 一个基本日历渲染组件
  7. 无需更新硬件的智能布线管理解决方案
  8. 主流 Android x86系统分享
  9. 超级账本成员身份管理
  10. 文字转语音朗读如何操作?手把手教你如何将文字转语音