/*** 获取批次数目** @param needSplitParam1* @param splitGroupNum* @return {@link Integer}*/public Integer getBatchNum(Object needSplitParam1, Integer splitGroupNum){if (needSplitParam1 instanceof Object[]) {Object[] splitParam = (Object[]) needSplitParam1;return splitParam.length % splitGroupNum == 0 ? splitParam.length / splitGroupNum : splitParam.length / splitGroupNum + 1;} elseif (needSplitParam1 instanceof Collection) {Collection<?> splitParam = (Collection<?>) needSplitParam1;return splitParam.size() % splitGroupNum == 0 ? splitParam.size() / splitGroupNum : splitParam.size() / splitGroupNum + 1;} else {return1;}}/*** 获取当前批次参数** @param needSplitParam* @param splitGroupNum* @param batch* @return {@link Object}* @throws NoSuchMethodException* @throws InvocationTargetException* @throws InstantiationException* @throws IllegalAccessException*/public Object getPartParam(Object needSplitParam, Integer splitGroupNum, Integer batch)throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {if (needSplitParam instanceof Object[]) {Object[] splitParam = (Object[]) needSplitParam;int end = Math.min((batch + 1) * splitGroupNum, splitParam.length);return Arrays.copyOfRange(splitParam, batch * splitGroupNum, end);} elseif (needSplitParam instanceof List) {List<?> splitParam = (List<?>) needSplitParam;int end = Math.min((batch + 1) * splitGroupNum, splitParam.size());return splitParam.subList(batch * splitGroupNum, end);} elseif (needSplitParam instanceof Set) {List splitParam = new ArrayList<>((Set) needSplitParam);int end = Math.min((batch + 1) * splitGroupNum, splitParam.size());//参数具体化了Set<?> set = (Set<?>) needSplitParam.getClass().getDeclaredConstructor().newInstance();set.addAll(splitParam.subList(batch * splitGroupNum, end));returnset;} else {returnnull;}}
}
定义处理返回值的接口
/*** 处理返回结果接口** @author: TangSiQi* @date: 2021年08月13日15:42**/
publicinterfaceHandleReturn{/*** 处理返回结果方法** @param t 拆分后多次请求结果* @return R 处理后的返回结果* @author tangsiqi* @date 2021/8/13 15:55*/Object handleReturn(List t);
}
实现了一个简单合并的
/*** 集合List等合并策略** @author: TangSiQi* @date: 2021年08月13日15:32**/
publicclassMergeFunctionimplementsHandleReturn{@Overridepublic Object handleReturn(List results){if (results == null) {returnnull;}if (results.size() <= 1) {//todoreturn results.get(0);}//这里自己要知道具体返回类型List first = (List) results.get(0);for (int i = 1; i < results.size(); i++) {first.addAll((List) results.get(i));}return first;}
}