网站注册转化率,做暧暖ox免费视频网站,网站建设和网络优化的区别,重庆网站建站建设免费简介在之前的java collectors文章里面#xff0c;我们讲到了stream的collect方法可以调用Collectors里面的toList()或者toMap()方法#xff0c;将结果转换为特定的集合类。今天我们介绍一下怎么自定义一个Collector。Collector介绍我们先看一下Collector的定义#xff1a;Co…简介在之前的java collectors文章里面我们讲到了stream的collect方法可以调用Collectors里面的toList()或者toMap()方法将结果转换为特定的集合类。今天我们介绍一下怎么自定义一个Collector。Collector介绍我们先看一下Collector的定义Collector接口需要实现supplier(),accumulator(),combiner(),finisher(),characteristics()这5个接口。同时Collector也提供了两个静态of方法来方便我们创建一个Collector实例。我们可以看到两个方法的参数跟Collector接口需要实现的接口是一一对应的。下面分别解释一下这几个参数supplierSupplier是一个函数用来创建一个新的可变的集合。换句话说Supplier用来创建一个初始的集合。accumulatoraccumulatoraccumulator定义了累加器用来将原始添加到集合中。combinercombiner用来将两个集合合并成一个。finisherfinisher将集合转换为最终的集合类型。characteristicscharacteristics表示该集合的特征。这个不是必须的参数。有了这几个参数我们接下来看看怎么使用这些参数来构造一个自定义Collector。自定义Collector我们利用Collector的of方法来创建一个不变的Setpublic static T CollectorT, SetT, SetT toImmutableSet() {return Collector.of(HashSet::new, Set::add,(left, right) - {left.addAll(right);return left;}, Collections::unmodifiableSet);}上面的例子中我们HashSet::new作为supplierSet::add作为accumulator自定义了一个方法作为combiner最后使用Collections::unmodifiableSet将集合转换成不可变集合。上面我们固定使用HashSet::new作为初始集合的生成方法实际上上面的方法可以更加通用public static T, A extends SetT CollectorT, A, SetT toImmutableSet(SupplierA supplier) {return Collector.of(supplier,Set::add, (left, right) - {left.addAll(right);return left;}, Collections::unmodifiableSet);}上面的方法我们将supplier提出来作为一个参数由外部来定义。看下上面两个方法的测试Testpublic void toImmutableSetUsage(){SetString stringSet1Stream.of(a,b,c,d).collect(ImmutableSetCollector.toImmutableSet());log.info({},stringSet1);SetString stringSet2Stream.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的实例希望能对大家有所帮助。本文的例子https://github.com/ddean2009/learn-java-streams/tree/master/customCollector欢迎关注我的公众号:程序那些事更多精彩等着您更多内容请访问 怎么在java中创建一个自定义的collectorwww.flydean.com