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 | 具有逻辑的函数,用于使用每个记录更新累加器值 | |
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;
});