Java 8系列之重构和定制收集器

前面我们已经了解到了Collector类库中各种收集器的强大,可是,它们也只是能满足常用的场景。既然开放了Collector接口,我们当然可以根据自已意愿去定制,实际操作起来还是比较简单的。Collectors.joining源码解析从前面,我们已经了解到一个Collector是由四部分组成的:Supplier supplier(): 创建新的结果结BiConsumer acc
摘要由CSDN通过智能技术生成

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实际上返回的是一个CollectorImpl对象,而其是Coll

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值