当前位置: 首页 > news >正文

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

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

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

}

相关文章:

  • 【论文阅读】Latent Consistency Models (LDMs)、LCM-LoRa
  • 2-认识小程序项目
  • Python网络爬虫进阶:自动切换HTTP代理IP的应用
  • 高纯气体市场调研:预计2029年将达到331亿美元
  • 【K12】Python写串联电阻问题的求解思路解析
  • TinyLog iOS v3.0接入文档
  • 【UE5】交互式展厅数字博物馆交互是开发实战课程
  • Linux下的HTTPS配置:从证书到安全连接
  • 智能小程序小部件(Widget)表单组件属性说明+代码明细
  • springboot整合websocket后启动报错:javax.websocket.server.ServerContainer not available
  • 用matlab解决简单的数学问题
  • Unity3D 服务器逻辑和传输如何分层/解耦详解
  • Java热插拔技术之SPI
  • GIT SourceTree 回滚提交
  • 计算机网络-NAT网络地址转换
  • js 正则表达式 校验 input输入框 输入格式必须为日期yyyyMM
  • 微信小程序获取来源场景值
  • RPA财务机器人在厦门市海沧医院财务管理流程优化汇总的应用
  • 迅为RK3588开发板编译 Buildroot单独编译图形化界面(编译 buildroot)
  • React查询、搜索类功能的实现
  • 第一集|好饭不怕晚,折腰若如初见
  • 缅甸内观冥想的历史漂流:从心理治疗室到“非语言现场”
  • 上海市国防动员办公室副主任吴斌接受审查调查
  • 金砖国家召开经贸联络组司局级特别会议,呼吁共同抵制单边主义和贸易保护主义
  • 媒体:“西北大学副校长范代娣成陕西首富”系乌龙,但她的人生如同开挂
  • 王毅谈中拉论坛十年成果