概述
怎么在java中创建一个自定义的collector
简介
在之前的java collectors文章里面,我们讲到了stream的collect方法可以调用Collectors里面的toList()或者toMap()方法,将结果转换为特定的集合类。
今天我们介绍一下怎么自定义一个Collector。
Collector介绍
我们先看一下Collector的定义:
@H_403_32@
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,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","d")
.collect(ImmutableSetCollector.toImmutableSet(LinkedHashSet::new));
log.info("{}",stringSet2);
}
INFO com.flydean.ImmutableSetCollector - [a,b,c,d]
INFO com.flydean.ImmutableSetCollector - [a,d]
总结
本文介绍了Collector和自定义Collector的实例,希望能对大家有所帮助。
欢迎关注我的公众号:程序那些事,更多精彩等着您!
更多内容请访问 www.flydean.com
相关文章
总结
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250
最后
以上就是开朗裙子为你收集整理的java中collector使用_怎么在java中创建一个自定义的collector的全部内容,希望文章能够帮你解决java中collector使用_怎么在java中创建一个自定义的collector所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复