前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >随机获取某个集合中的某个元素,多次获取时不重复

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

作者头像
天涯泪小武
发布2024-01-17 08:36:55
1080
发布2024-01-17 08:36:55
举报
文章被收录于专栏:SpringCloud专栏SpringCloud专栏

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

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

}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-01-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档