package com.ks.lucky.util;
|
|
import java.util.*;
|
|
/**
|
* 开奖帮助类
|
*/
|
public class LuckyRunUtil {
|
|
|
/**
|
* 计算开奖的人
|
*
|
* @param map
|
* @param number
|
* @return
|
*/
|
public static Set<String> compute(Map<String, Integer> map, int number) {
|
if (number < 1) {
|
return new HashSet<>();
|
}
|
|
List<String> mList = new ArrayList<>();
|
for (Iterator<String> its = map.keySet().iterator(); its.hasNext(); ) {
|
String uid = its.next();
|
int c = map.get(uid);
|
for (int i = 0; i < c; i++) {
|
mList.add(uid);
|
}
|
}
|
|
Set<String> luckyUids = new HashSet<>();
|
for (int i = 0; i < number; i++) {
|
if (mList.size() == 0)
|
break;
|
long startTime = System.currentTimeMillis();
|
int p = (int) (mList.size() * Math.random());
|
String uid = mList.get(p);
|
luckyUids.add(uid);
|
|
//移除列表右面的相同uid
|
while (mList.size() > p && mList.get(p) == uid) {
|
mList.remove(p);
|
}
|
|
//查询相同uid的列表左侧起点
|
for (int j = p - 1; j >= 0; j--) {
|
if (!mList.get(j).equalsIgnoreCase(uid)) {
|
p = j + 1;
|
break;
|
} else if (j == 0) {
|
p = 0;
|
}
|
}
|
|
//删除左侧相同uid
|
while (mList.size() > p && mList.get(p) == uid) {
|
mList.remove(p);
|
}
|
|
System.out.println("运行时间:" + (System.currentTimeMillis() - startTime));
|
}
|
|
|
System.out.println(luckyUids);
|
return luckyUids;
|
}
|
|
|
}
|