return new CollectorImpl<CharSequence, StringBuilder, String>(
StringBuilder::new, StringBuilder::append,
(r1, r2) -> { r1.append(r2); return r1; },
StringBuilder::toString, CH_NOID);
}
- Supplier< A> supplier()
其函数为StringBuilder::new,即通过该方法创建一个StringBuilder方法,作为累积器的初始值。
- BiConsumer<A, T> accumulator
累积器:StringBuilder::append,即会对流中的元素执行追加。
- BinaryOperator< A> combiner
组合器,也是调用append方法,进行字符串的规约。
- Function<A,R> finisher
转换器:由于累积器返回的最终对象为StringBuilder,并不是目标String类型,故需要调用StringBuilder#toString方法进行转换
- Set< Characteristics> characteristics
无任何行为。
从上面的函数定义我们可以得出该方法的作用:针对字符串流,会对流中的元素执行字符的追加动作,流元素之间没有分隔符号,示例如下:
2.2 joining(CharSequence delimiter)
public static Collector<CharSequence, ?, String> joining(CharSequence delimiter) {
return joining(delimiter, “”, “”);
}
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);
}
- Supplier< A> supplier()
其函数为() -> new StringJoiner(delimiter, prefix, suffix),累积器的初始值为StringJoiner。
- BiConsumer<A, T> accumulator
累积器:StringJoiner::append,即会对流中的元素执行追加。