Stream系列:
前面我们已经了解到了Collector类库中各种收集器的强大,可是,它们也只是能满足常用的场景。既然开放了Collector接口,我们当然可以根据自已意愿去定制,实际操作起来还是比较简单的。
Collectors.joining源码解析
从前面,我们已经了解到一个Collector是由四部分组成的:
- Supplier<A> supplier(): 创建新的结果结
- BiConsumer<A, T> accumulator(): 将元素添加到结果容器
- BinaryOperator<A> combiner(): 将两个结果容器合并为一个结果容器
- Function<A, R> finisher(): 对结果容器作相应的变换
我们先Collectors.joining是怎么实现的:
String strJoin = Stream.of("1", "2", "3", "4")
.collect(Collectors.joining(",", "[", "]"));
System.out.println("strJoin: " + strJoin);
// 打印结果
// strJoin: [1,2,3,4]
这里,我们跟踪代码,看看Collectors.joining的源码:
public static Collector<CharSequence, ?, String> joining(CharSequence delimiter,
CharSequence prefix,
CharSequence suffix) {
return new CollectorImpl<>(
() -> new StringJoiner(delimiter, prefix, suffix),
StringJoiner::add, StringJoiner::merge,
StringJoiner::toString, CH_NOID);
}
Collectors.joining实际上返回的是一个Collect
Java 8:自定义Stream Collector实现数字奇偶性求和

本文详细介绍了如何自定义Java 8 Stream的Collector,以满足特定需求,如根据数字奇偶性进行加法运算。通过分析Collectors.joining的源码,解释了Collector的组成部分——Supplier、Accumulator、Combiner和Finisher。然后,文章展示了如何定义一个名为IntegerSum的过渡容器类,用于存储累加结果,并实现了自定义的Collector,该Collector能处理Integer类型的输入,以满足奇数直接相加、偶数乘以2后再相加的条件。
最低0.47元/天 解锁文章





