通过Consumer函数式接口,实现回调
比如有场景: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函数式接口,实现回调相关推荐
- [彻底理解]JDK1.8 函数式接口 Consumer Supplier 以及 JAVA新纪元 λ表达式的到来
JDK1.8 函数式接口 Consumer & Supplier 以及 JAVA新纪元 λ表达式的到来 背景什么的被吞了,直接进入主题 函数式接口(定义自己百度,一大堆) 因为看了一些关于JD ...
- 函数式接口 lambda表达式 方法引用
拉呱: 终于,学习jdk8的新特性了,初体验带给我的感觉真爽,代码精简的不行,可读性也很好,而且,spring5也是把jdk8的融入到血液里,总之一句话吧,说的打趣一点,学的时候自己难受,学完了写出来 ...
- java8 注解: @FunctionalInterface (函数式接口)
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. Java8提倡函数式编程,因而新增了一个函数式接口.函数式接口保证了函数式编程,同时也保证了能够兼容 ...
- 高级JAVA - 利用函数式接口实现通用的取并集/交集/差集
package com.xing.dto;import com.xing.common.utils.XDataUtil; import lombok.Data;import java.util.Arr ...
- java新特性-函数式接口-作为方法参数-作为方法的返回值-常用函数式接口-Supplier-Consumer-Predicate-Function
文章目录 函数式接口 概念 函数式接口作为方法参数 函数式接口作为方法的返回值 常用函数式接口 Supplier接口 常用函数式接口 Consumer 函数式接口之 Predicate接口 常用接口之 ...
- Java中的函数式接口
函数式接口 1. 函数式接口 1.1 概述 如果说一个接口内有且只有一个方法,而且该方法是一个缺省属性为public abstract方法,该接口可以称之为是一个函数式接口. 自定义函数式接口, ...
- 常用的函数式接口FunctionInterface
常见的四类函数式接口 Supplier 生产者, 返回一个指定类型的数据 有且只有一个方法T get();不需要参数,返回指定T类型数据 package com.qfedu.c_supplier;im ...
- Day 28 函数式接口
Day 28 1. 函数式接口 1.1 概述 如果说一个接口只有一个方法,而且干方法是一个缺省属性为abstract方法,该接口称之为函数式接口.可以直接使用JDK1.8新特征,Lambda表达式来使 ...
- 奋斗在JAVA路上的随手记——函数式接口
第一章 函数式接口 1.含义 A. 函数式接口是在Java语言当中"有且只有一个抽象方法的接口" B. 如果方法的参数是 函数式接口,那么在传递参数的时候,就可以写 Lambd ...
最新文章
- 2-4 js基础-事件对象小结
- msp430入门学习30
- HttpClient系列~StringContent与FormUrlEncodedContent
- 又翻车?苹果被揪出夸大iPhone续航时间:iPhone XR虚标51%
- mysql延迟注入br,实验3—SQL注入漏洞的攻击与防御(基于时间延迟的盲注)
- 动态调整linux分区大小,GParted 动态调整Linux分区大小
- springboot输出流到页面_Springboot如何使用Map将错误提示输出到页面
- 杭电ACM2000题
- Android HID触摸屏驱动怎么开发
- 涉及到各种场景-英语小记-最爱的一篇
- Lighttpd介绍
- 如何使用Better Zip软件的密码保护功能
- php 简明现代魔法,【转】WinCacheGrind配合XDebug分析PHP程序性能 — 简明现代魔法...
- c++复习——侯捷版
- html 中长单词换行问题
- 约翰霍普金斯大学计算机专业,约翰霍普金斯大学计算机专业排名第几?
- 用C#开发的一个通用的地铁换乘查询工具
- 磁力云盒,自动静默关注店铺
- Chrome插件开发-右键菜单开启页面编辑
- 微信的用户已退出是什么意思_秋天的第一杯奶茶是什么梗 微信朋友圈52元奶茶红包是什么意思...