背景
很多时候在处理数据的时候, 尤其是大批量的数据 + 网络访问,在服务端会有很长的计算时间。因此把数据进行分组会加快处理速度。
过程
- 分组个数设置
- 循环次数求法
- 结果集的收集
- 对结果集进行业务逻辑处理
代码
private static int getForeachTimes(int numOfGroup, int total) {
if (total%numOfGroup == 0) {
return total/numOfGroup;
}
int i = total / numOfGroup;
return i+1;
}
private static void doBiz(ArrayList<String> list, int numOfGroup) {
int total = list.size();
int times = getForeachTimes(numOfGroup, total);
System.out.println("需要循环的次数:" + times );
HashMap<Integer, List<String>> integerListHashMap = new HashMap<>();
for (int i = 0; i < times; i++) {
ArrayList<String> strings = new ArrayList<>();
for (int j = 0; j < numOfGroup; j++) {
if (i* numOfGroup + j <= list.size() - 1) {
strings.add(list.get(i* numOfGroup + j));
}
}
integerListHashMap.put(i, strings);
}
List<String> resultList = new ArrayList<>();
Iterator<Map.Entry<Integer, List<String>>> iterator = integerListHashMap.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<Integer, List<String>> next = iterator.next();
List<String> value = next.getValue();
System.out.println("分组信息:" + JSON.toJSONString(value));
// 写业务逻辑过程,全部封装到一个list容器中去。
// dubbo服务,http服务请求第三方。
// list<String> list2 = HTTPClientUtils.doPost("www.baidu.com", value);
// resultList.addAll(list2)
}
// 最后在对resultList这个结果集进行业务处理即可。
}
测试代码块
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
int numOfGroup = 2;
doBiz(list, numOfGroup);
}
测试结果
需要循环的次数:3
分组信息:["a","b"]
分组信息:["c","d"]
分组信息:["e"]
小结
记录一个分组处理的小算法,后续遇见类似的场景,粘贴代码即可。