主页 > 电脑硬件  > 

随机获取某个集合中的某个元素,多次获取时不重复


譬如想随机获取某个集合中的某个数,用户多次请求时尽量不给用户返回重复的数。

倘若用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; } }

标签:

随机获取某个集合中的某个元素,多次获取时不重复由讯客互联电脑硬件栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“随机获取某个集合中的某个元素,多次获取时不重复