java集合指定分组异步执行
集合指定分组异步执行
先集合分组,指定分组后分批执行
@Test
public void testList() {
List<String> strings = Arrays.asList("1", "2", "3", "4");
List<List<String>> lists = averageGrouping(strings, 3);
List<String> strings1 = lists.get(0);
new Thread(() -> {
doSomething(strings1);
}).start();
List<String> strings2 = lists.get(1);
new Thread(() -> {
doSomething(strings2);
}).start();
List<String> strings3 = lists.get(2);
new Thread(() -> {
doSomething(strings3);
}).start();
}
public void doSomething(List<String> sou) {
for (String s : sou) {
System.out.println(Thread.currentThread().getName() + "结果" + s);
}
}
/**
* 将一组数据平均分成N份
*
* @param souce 数据源
* @param n 平均分N组
* @return
*/
public static List<List<String>> averageGrouping(List<String> souce, int n) {
List<List<String>> result = new ArrayList<>();
int remainder = souce.size() % n;
int number = souce.size() / n;
int offset = 0;
for (int i = 0; i < n; i++) {
List<String> value = null;
if (remainder > 0) {
value = souce.subList(i * number + offset, (i + 1) * number + offset + 1);
remainder--;
offset++;
} else {
value = souce.subList(i * number + offset, (i + 1) * number + offset);
}
result.add(value);
}
return result;
}