AccumulateBy

对记录进行分组,并将每个组缩减为每个组的单个记录。

public <I extends java.io.Serializable> GearsBuilder<I> accumulateBy(
	gears.operations.ExtractorOperation<T> extractor, 
	gears.operations.AccumulateByOperation<T,I> accumulator)

public <I extends java.io.Serializable> GearsBuilder<I> accumulateBy(
	gears.operations.ValueInitializerOperation<I> valueInitializer, 
	gears.operations.ExtractorOperation<T> extractor, 
	gears.operations.AccumulateByOperation<T,I> accumulator)

遍历管道中的记录,根据提供的提取器对它们进行分组,然后使用累加器函数将每个组缩减为每个组的单个记录。

累加器的初始值为 null,除非您提供值初始化器操作作为参数。

参数

类型参数

名称 描述
I 返回的构建器的模板类型

函数参数

名称 类型 描述
accumulator AccumulateByOperation<T,​I> 一个包含使用每个记录更新累加器值的逻辑的函数
extractor ExtractorOperation 从每个记录中提取特定值
valueInitializer ValueInitializerOperation 每当累积值为 null 时,使用此函数对其进行初始化

返回值

返回具有新模板类型的 GearsBuilder 对象。

示例

以下两个示例都计算唯一值的数量。

没有 valueInitializer 参数

GearsBuilder.CreateGearsBuilder(reader).
   	accumulateBy(r->{
   		return r.getStringVal();
   	},(k, a, r)->{
   		Integer ret = null;
   		if(a == null) {
   			ret = 0;
   		}else {
   			ret = (Integer)a;
   		}
   		return ret + 1;
});

使用 valueInitializer 参数

GearsBuilder.CreateGearsBuilder(reader).
    	accumulateBy(()->{
   		return 0;
   	},r->{
   		return r.getStringVal();
   	},(k, a, r)->{
   		return a + 1;
   	});
为此页面评分
返回顶部 ↑