譬如想随机获取某个集合中的某个数,用户多次请求时尽量不给用户返回重复的数。
倘若用random的nextInt方法,当只有两三个元素时,则很可能多次请求返回的都是同一个,体验很差。
所以我们应该尽快让多次请求时,返回的不重复。
代码如下
代码语言:javascript复制import org.springframework.stereotype.Component;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
/**
* 产生随机Random的工具类
*@author weifengwu
*@create 2024/1/15 12:05
*/
@Component
public class CpSceneCardListOffer {
private final CopyOnWriteArrayList<String> dataList = new CopyOnWriteArrayList<>();
private final CopyOnWriteArrayList<String> usedList = new CopyOnWriteArrayList<>();
public void addAll(List<String> list) {
if (dataList.equals(list)) {
return;
}
dataList.clear();
dataList.addAll(list);
}
/**
* 每次提供一个
*/
public synchronized String getRandomElement() {
if (dataList.isEmpty()) {
// 如果列表中的元素已经用尽,可以选择重新填充或者返回空值
return null;
}
Collections.shuffle(dataList); // 随机打乱列表顺序
String element = dataList.remove(0); // 移除并返回第一个元素
usedList.add(element);
if (dataList.isEmpty()) {
// 如果列表中的元素已经用尽,将已使用的元素重新放回列表以实现循环使用
dataList.addAll(usedList);
usedList.clear();
}
return element;
}
}