java8实战:使用流收集数据之toList、joining、groupBy(多字段分组)

本文详细介绍了Java8中流数据收集器的使用,特别是`joining`、`minBy`、`maxBy`等聚合操作以及`groupingBy`的多字段分组。通过源码分析,揭示了`groupingBy`的实现原理,包括累积器、组合器和转换器的作用。并展示了如何实现二级分组,以满足更复杂的业务需求。
摘要由CSDN通过智能技术生成

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,即会对流中的元素执行追加。

  • BinaryOperator< A> combiner

组合器,StringJoiner::merge。

  • Function<A,R> finisher

转换器:由于累积器返回的最终对象为StringBuilder,并不是目标String类型,故需要调用StringBuilder#toString方法进行转换

  • Set< Characteristics> characteristics

无任何行为。

其示例如下:

在这里插入图片描述

3、聚合相关收集器


聚合相关收集器,主要包括minBy、maxBy、sum、avg等相关函数,其主要方法声明如下:

public static Collector<T, ?, Optional> minBy(Comparator<? super T> comparator)

public static Collector<T, ?, Optional> maxBy(Comparator<? super T> comparator)

public static Collector<T, ?, Integer> summingInt(ToIntFunction<? super T> mapper)

public static Collector<T, ?, Long> summingLong(ToLongFunction<? super T> mapper)

public static Collector<T, ?, Double> summingDouble(ToDoubleFunction<? super T> mapper)

public static Collector<T, ?, Double> averagingInt(ToIntFunction<? super T> mapper)

public static Collector<T, ?, Double> averagingLong(ToLongFunction<? super T> mapper)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值