服装商务网站建设策划书北京专门做seo
譬如想随机获取某个集合中的某个数,用户多次请求时尽量不给用户返回重复的数。
倘若用random的nextInt方法,当只有两三个元素时,则很可能多次请求返回的都是同一个,体验很差。
所以我们应该尽快让多次请求时,返回的不重复。
代码如下
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;}}