加权随机算法实现
package common;
import com.google.common.base.Preconditions;
import org.apache.commons.math3.util.Pair;
import java.util.List;
import java.util.SortedMap;
import java.util.TreeMap;
public class WeightRandom<K, V extends Number> {
private TreeMap<Double, K> weightMap = new TreeMap<>();
/**
* @description: 加权随机算法实现
* @author 赵璇
* @date 2022/5/20 1:31
* @version 1.0
*/
public WeightRandom(List<Pair<K, V>> list) {
Preconditions.checkNotNull(list, "list can NOT be null!");
for (Pair<K, V> pair : list) {
//统一转为double
double lastWeight = this.weightMap.size() == 0 ? 0 : this.weightMap.lastKey().doubleValue();
//权重累加
this.weightMap.put(pair.getValue().doubleValue() + lastWeight, pair.getKey());
}
}
public K random() {
double randomWeight = this.weightMap.lastKey() * Math.random();
SortedMap<Double, K> tailMap = this.weightMap.tailMap(randomWeight, false);
return this.weightMap.get(tailMap.firstKey());
}
}
K:KEY,锁定内容使用
V:权值,必须是数值型,而且是包装类
List的remove最佳用法
moBanC.removeIf(next -> next.contains("#"));