java全局变量怎么定义_怎么在java中创建一个自定义的collector
简介
在之前的java collectors文章里面,我们讲到了stream的collect方法可以调用Collectors里面的toList()或者toMap()方法,将结果转换为特定的集合类。
今天我们介绍一下怎么自定义一个Collector。
Collector介绍
我们先看一下Collector的定义:
Collector接口需要实现supplier(),accumulator(),combiner(),finisher(),characteristics()这5个接口。
同时Collector也提供了两个静态of方法来方便我们创建一个Collector实例。
我们可以看到两个方法的参数跟Collector接口需要实现的接口是一一对应的。
下面分别解释一下这几个参数:
- supplier
Supplier是一个函数,用来创建一个新的可变的集合。换句话说Supplier用来创建一个初始的集合。accumulator
- accumulator
accumulator定义了累加器,用来将原始添加到集合中。
- combiner
combiner用来将两个集合合并成一个。
- finisher
finisher将集合转换为最终的集合类型。
- characteristics
characteristics表示该集合的特征。这个不是必须的参数。
有了这几个参数,我们接下来看看怎么使用这些参数来构造一个自定义Collector。
自定义Collector
我们利用Collector的of方法来创建一个不变的Set:
public static Collector, Set> toImmutableSet() { return Collector.of(HashSet::new, Set::add, (left, right) -> { left.addAll(right); return left; }, Collections::unmodifiableSet); }
上面的例子中,我们HashSet::new作为supplier,Set::add作为accumulator,自定义了一个方法作为combiner,最后使用Collections::unmodifiableSet将集合转换成不可变集合。
上面我们固定使用HashSet::new作为初始集合的生成方法,实际上,上面的方法可以更加通用:
public static > Collector> toImmutableSet( Supplier supplier) { return Collector.of( supplier, Set::add, (left, right) -> { left.addAll(right); return left; }, Collections::unmodifiableSet); }
上面的方法,我们将supplier提出来作为一个参数,由外部来定义。
看下上面两个方法的测试:
@Test public void toImmutableSetUsage(){ Set stringSet1=Stream.of("a","b","c","d") .collect(ImmutableSetCollector.toImmutableSet()); log.info("{}",stringSet1); Set stringSet2=Stream.of("a","b","c","d") .collect(ImmutableSetCollector.toImmutableSet(LinkedHashSet::new)); log.info("{}",stringSet2); }
输出:
INFO com.flydean.ImmutableSetCollector - [a, b, c, d]INFO com.flydean.ImmutableSetCollector - [a, b, c, d]
总结
本文介绍了Collector和自定义Collector的实例,希望能对大家有所帮助。
欢迎关注我的公众号:程序那些事,更多精彩等着您!
更多内容请访问:flydean的博客 flydean.com
java全局变量怎么定义_怎么在java中创建一个自定义的collector相关推荐
- java中collector使用_怎么在java中创建一个自定义的collector
怎么在java中创建一个自定义的collector 简介 在之前的java collectors文章里面,我们讲到了stream的collect方法可以调用Collectors里面的toList()或 ...
- 怎么在java中创建一个自定义的collector
文章目录 简介 Collector介绍 自定义Collector 总结 怎么在java中创建一个自定义的collector 简介 在之前的java collectors文章里面,我们讲到了stream ...
- c++中的new_怎么在java中创建一个自定义的collector
简介 在之前的java collectors文章里面,我们讲到了stream的collect方法可以调用Collectors里面的toList()或者toMap()方法,将结果转换为特定的集合类. 今 ...
- java静态数组定义_详解Java静态数组
说到Java静态数组,我们第一时间可能就会想到相应的动态数组,两者看上去挺相似,实质却大不一样.Java静态数组是一定义出来就创建了,而动态数组则是定义时不创建,使用时才创建,一定意义上节省了内存空间 ...
- 用java画网状图_如何在背景中绘制一个带网格线的漂亮条形图?
我是Matlab的新手 . 我做了一个实验 . 我需要帮助将结果绘制在2条形图(具有不同颜色)中,结果图形需要有网格线 . 有人建议使用非常matlap的代码输出一个漂亮的情节吗? 数据如下: x轴是 ...
- mysql auto_increment建表_在mysql表中创建一个ID auto_increment(在事实之后)
小编典典 例如,这是一个具有主键但不是的表AUTO_INCREMENT: mysql> CREATE TABLE foo ( id INT NOT NULL, PRIMARY KEY (id) ...
- python制作一个计时器_如何在python中创建一个反应计时器作为GUI?
我有一个反应计时器的问题.我想在我的程序中有一个按钮,它能告诉我从定时器开始按下按钮所花的时间.在 假设我打开我的程序,我想要一个按钮,如果我点击它,它将打印出计时器启动后我按下它所花的时间.然后在我 ...
- iar怎么新建立项目_请简述IAR中创建一个应用项目的步骤及配置过程。
[多选题]公路工程中应用的石灰要求达到( ). [多选题]在石灰工业废渣稳定土施工前,取有代表性石灰样品进行下列试验( ). [单选题]在沥青混合料中掺加适量消石灰粉,可以有效提高沥青混合料的( ). ...
- Java全局变量怎么定义?什么是全局变量?
Java的面向对象的代码结构会使在多个位置引用变量更加困难.有时也很难确定给定变量应属于哪个类,尤其是当它是一个广泛使用的值(例如数据库连接器或数学常数)时. Java全局变量怎么定义? 在许多语言中 ...
最新文章
- Windows Embedded Standard开发初体验(二)
- 《强化学习周刊》第25期:DeepMind提出无模型风险敏感强化学习、谷歌发布 RLDS数据集生态系统...
- c++类的实例化,有没有new的区别
- DL之DNN优化技术:神经网络算法简介之GD/SGD算法(BP的梯度下降算法)的简介、理解、代码实现、SGD缺点及改进(Momentum/NAG/Ada系列/RMSProp)之详细攻略
- php命名空间规则解析及高级功能,PHP命名空间解析规则
- windows10配置php7.1+apache2.4+mysql5.7
- Android UI开发第二十七篇——实现左右划出菜单
- 使用EntityFrameworkCore实现Repository, UnitOfWork,支持MySQL分库分表
- 尤金·卡巴斯基:卡巴斯基实验室调查内网遭黑客攻击事件
- Android两次按返回键退出应用程序
- arcgis加载天地图_【arcgis地图实战】之天地图在线服务加载
- centos 6.5 编译php mysql5.6_CentOS6.5 编译安装PHP5.6(apache模块)
- android 不限速迅雷,迅雷不限速分享(手机+PC端打包) – 长期更新
- 职称评审要满足什么条件
- windows下如何创建bat文件
- esp32触摸touch功能使用过程详述arduino
- 【培训版】《最强大脑记忆力训练教程》[2017年7月份更新]
- <冈萨雷斯图像处理>局部直方图处理:直方图统计(Histogram Statistics)
- 据说99%的程序猿都不懂得这样表白
- Web自动化测试模式page object的小利器:gizmo
热门文章
- 使用命令行加载 jMeter 自定义配置文件里的自定义 property
- Angular 依赖的测试和 Fake
- 什么是TypeScript的字符串索引签名
- SAP Data Intelligence API执行出错的排错之道
- SAP Fiori Elements - smart control demo1 currency field - how is manifest.json loaded
- 自己写的一个报表,研究SAP CRM ibase保存问题
- hybris backoffice搜索时遇到could not execute full-text query的解决方案
- SAP UI5 BindingParser
- local sandbox html里的script tag是如何load到memory里的
- S/4HANA的生产订单,哪个字段可以用来做生产完成的标志位