[Java8新特性]Collectors源码阅读-4 mapping,collectingAndThen和toMap

本文详细介绍了Java8中Collectors的几个重要方法:mapping用于先映射后汇聚,collectingAndThen则先汇聚再进行后续操作。toMap提供了创建Map的不同方式,包括处理键值映射、合并策略以及自定义Map类型。文中通过实例展示了这些方法的使用场景和实现原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这两个函数是比较常见的,也比较好理解mapping就是一个先映射后汇聚的函数,collectingAndThen则相反,是先汇聚再进行后续操作的函数,toMap是一个toCollections类的函数,本应该在之前的系列讲,但是实现跟toCollections不是同一个套路,我们把它放在这讲。

1.mapping(Function<? super T, ? extends U> mapper, Collector<? super U, A, R> downstream)

这个方法等同于

  stream.mapping(mapper)
        .collect(downStream)

具体的实现:

BiConsumer<A, ? super U> downstreamAccumulator = downstream.accumulator();
        return new CollectorImpl<>(downstream.supplier(),
                                   (r, t) -> downstreamAccumulator.accept(r, mapper.apply(t)),
                                   downstream.combiner(), downstream.finisher(),
                                   downstream.characteristics());

非常一目了然的实现,先将T映射到K然后再进行后续的操作,所以只需要在accumulate的时候做一个额外的处理,即调用mapper.apply(t)方法,将T变成K
这个方法在多层级的聚合操作中是非常适用的,比如官方文档给出的例子:

 Map<City, Set<String>> lastNamesByCity
         = people.stream().collect(groupingBy(Person::getCity
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值