6月份--Reducer聚合结合策略工厂

261 阅读1分钟

3.5 Reducer聚合 对一个扩展点多个实现的返回结果进行聚合(合并结果) 所有的聚合类都需要实现IReducer接口,并自定义 reduce() stop() 方法实现


  /** 返回第一个符合条件的,短路式中止后续扩展点执行,用于参数校验等场景  */
    public static <R> SimpleReducer<R> firstOf(final Predicate<R> p) {
        return new SimpleReducer<R>() {
            public R reduce(List<R> list) {
                R result = null;
                if (list != null && list.size() > 0)
                    result = list.get(list.size() - 1);
                return result;
            }
 
            public boolean stop(List<R> list) {
                boolean result = false;
                if (list != null && list.size() > 0)
                    result = p.test(list.get(list.size() - 1));
                return result;
            }
        };
    }

image.png

伪代码示例

List<R> resultList = new ArrayList<>();
for (ExtensionSpec task : this.taskList) {
    ...
    result = apply(task.getExt(), preResult);
    ...
    resultList.add(result);
    if (this.reducer.stop(resultList))
        break;
}
result = (R) this.reducer.reduce(resultList);