/**
* 分配 把sourceData 均分到targetData上
* @param targetData
* @param sourceData
* @author Wdful
* @return
*/
private Map<Integer,List<Integer>> averData(List<Integer> targetData, List<Integer> sourceData){
if(sourceData.size() == 0 || targetData.size() == 0){
return null;
}
Map<Integer,List<Integer>> res = new HashMap<>();
if(sourceData.size() >= targetData.size()){
//保证至少分配一条
int baseNum = sourceData.size()/targetData.size();
int flag = 0;
for (int i = 0; i < targetData.size(); i++) {
List<Integer> list = new ArrayList<>();
for (int j = flag; j < (i+1)*baseNum; j++) {
list.add(sourceData.get(j));
}
flag = (i+1)*baseNum;
res.put(targetData.get(i),list);
}
}
int lastNum = sourceData.size() % targetData.size();
if(lastNum > 0){
Map<Integer,List<Integer>> res2 = new HashMap<>();
for (int i = sourceData.size()-1; i >= sourceData.size()-lastNum; i--) {
List<Integer> list = new ArrayList<>();
list.add(sourceData.get(i));
res2.put(targetData.get(sourceData.size()-1 - i),list);
}
res = mergeMap(res,res2);
}
return res;
}
/**
* 合并map 合并重复key
* @param map1
* @param map2
* @author Wdful
* @return
*/
private Map<Integer, List<Integer>> mergeMap(Map<Integer, List<Integer>> map1, Map<Integer, List<Integer>> map2) {
if(map1.size() == 0){
if(map2.size() == 0){
return null;
}
return map2;
}
for (Integer key : map1.keySet()) {
if (map2.get(key) != null) {
List<Integer> list = map1.get(key);
list.addAll(map2.get(key));
map1.put(key, list);
map2.remove(key);
}
}
map1.putAll(map2);
return map1;
}
写了个小东西 java合并map 重复键合并 以及平均分配
最新推荐文章于 2024-04-30 16:36:08 发布