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 当累加值为空时,使用此函数对其进行初始化

返回

返回具有新模板类型的 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;
   	});
RATE THIS PAGE
Back to top ↑