业务会有一些场景是: 选中数据分配给对应业务人员
一下是写的一些代码
/**
* 分段截取
* @param list 需要分割的集合
* @param n 分成份数
*/
public static <T> List<List<T>> splitList(List<T> list, int n) {
int size = list.size();
int remainder = size % n;
int length = size / n;
List<List<T>> result = new ArrayList<>();
int index = 0;
for (int i = 0; i < n; i++) {
int endIndex = index + length + (remainder-- > 0 ? 1 : 0);
result.add(list.subList(index, endIndex));
index = endIndex;
}
return result;
}
/**
* 将集合平均分配
* @param list
* @param n
* @param assign
* @return
* @param <T>
*/
public static <T> Map<String, List<T>> assignListToUsers(List<T> list, int n, List<String> assign) {
Map<String, List<T>> result = new HashMap<>();
List<List<T>> subLists = splitList(list, n);
for (int i = 0; i < n; i++) {
String user = assign.get(i);
List<T> subList = subLists.get(i);
result.put(user, subList);
}
return result;
}
/**
* List 数据分配给 用户
* @param data1
* @param numUsers
* @param assign
* @return
* @param <T>
*/
public static <T> Map<String, List<T>> assignDataToUsers( List<T> data1, int numUsers, List<String> assign) {
List<T> dataList = new ArrayList<>(data1);
//数据结构 <assign,List(id)>
Map<String, List<T>> result = new HashMap<>();
//获取最小值
int n = Math.min(numUsers, dataList.size());
List<Integer> counts = new ArrayList<>(Collections.nCopies(n, dataList.size() / n));
for (int i = 0; i < dataList.size() % n; i++) {
counts.set(i, counts.get(i) + 1);
}
int startIndex = 0;
for (int i = 0; i < n; i++) {
String user = assign.get(i);
int count = counts.get(i);
List<T> subList = dataList.subList(startIndex, startIndex + count);
startIndex += count;
result.put(user, subList);
}
return result;
}

被折叠的 条评论
为什么被折叠?



