看过上一篇的应该知道,在均分采样的时候,必须保证数量的顺序是从小到大。
因为,我把多出来,全部从最后一个采了,所以要保证最后一个数量是这里面最多的。
哎~,老大看后,就不爽了,说这样不行,不能全部放到最后一个。
那那那~~~,继续撸呗
直接上代码。
达到的效果:
里面模板中数量的顺序,现在不要求了。但是如果你想要数量多的,多采一些,那么需要保证按照数量降序处理
对于两个临界点的处理。
2.1 当采样总数 > 模板总数的。每个模板全采
2.1 当采样总数 < 模板个数的时候。循环遍历到的先采。这样有些模板就可能采不到。(这种根据自己的业务来设置)
2.3 当模板的个数 <= 采样总数 <= 模板的总数量。正常处理。
均分采样
/***
* 均分采样
* @param map 存放数据,需要按照数量正序排
* @param sampleTotal 需要采样的数量
*/
public static Map allocateFlowByAverage2(Map map, Integer sampleTotal) {
Map remainMap = new HashMap<>(map);
// 加上这个。!remainMap.isEmpty(),解决当采样数量多余模板中的数量
while (sampleTotal > 0 && !remainMap.isEmpty()) {
double