从List集合中随机取值

11 篇文章 0 订阅
11 篇文章 0 订阅

在开发过程中有遇到需求,当用户点击刷新的时候,需要从List集合中取出不重复元素,并返回给前端。当然根据个人需求来定义不同解决方案。

我最初的解决方案:

1、是用缓存记录用户的点击次数当用户的点击次数为n时,例如每次从集合中取出9个不同元素。采用类似分页来处理每次取出都是不同元素。判断9(n-1)<list.size每次取值从list的索引开始:9(n-1)索引结束:(9n-1),这里得注意最后一次list取值得时候可能取值不足9个。当然当用户点击刷新完整个list之后我们可以清除缓存重新来过。

   @Test
    public void getListValue(){
        List<String> lists=new ArrayList<String>();
        lists.add("a");
        lists.add("b");
        lists.add("c");
        lists.add("d");
        lists.add("e");
        lists.add("f");
        lists.add("g");
        lists.add("h");
        lists.add("i");
        lists.add("j");
        lists.add("k");
        lists.add("l");
        lists.add("m");
        lists.add("n");
        lists.add("o");
        lists.add("p");
        lists.add("q");
        lists.add("r");
        lists.add("s");
        lists.add("t");
        lists.add("u");
        lists.add("v");
        lists.add("w");
        lists.add("x");
        lists.add("y");
        lists.add("z");
        int size = lists.size();
        int x=8; //x代表每次取多少个数据
        //System.out.print("集合长度==="+size);
        //n代表的是用户点击的次数
        for (int n = 1; n <6 ; n++) {
            List<String> list2=new ArrayList<>();
            //先判断取值开始索引是否小于list.size
            if (x*(n-1)<size){
                //再判断取值结束索引是否小于list.size
                if ((x*n-1)<size){
                    for (int i = x*(n-1); i <=x*n-1 ; i++) {
                        list2.add(lists.get(i));
                    }
                }else {
                    //当取值开始索引小于list.size  取值结束索引大于list.size的时候
                    for (int i = x*(n-1); i <size ; i++) {
                        list2.add(lists.get(i));
                    }

                }
            }
            if (list2!=null){
                for (int i = 0; i <list2.size() ; i++) {
                    System.out.print(i+list2.get(i)+" ");
                }
            }
            System.out.println("");

        }


    }

输出:

0a 1b 2c 3d 4e 5f 6g 7h 
0i 1j 2k 3l 4m 5n 6o 7p 
0q 1r 2s 3t 4u 5v 6w 7x 
0y 1z 

 

方案二:

2、我们数据比较小用的方法也是比较简单,每次都随机从list的集合中取出9个元素的索引存入set集合,然后再取出对应索引的元素添加到新的集合中返回前端。我们用的是第二种方法

 

package com.youyuan.TestDemo;

import java.util.*;

public class TestDemo {
    public static void main(String[] args) {

        List<String> lists=new ArrayList<String>();
            lists.add("a");
            lists.add("b");
            lists.add("c");
            lists.add("d");
            lists.add("e");
            lists.add("f");
            lists.add("g");
            lists.add("h");
            lists.add("i");
            lists.add("j");
            lists.add("k");
        lists.add("l");
        lists.add("m");
        lists.add("n");
        lists.add("o");
        lists.add("p");
        lists.add("q");
        lists.add("r");
        lists.add("s");
        lists.add("t");
        lists.add("w");
        lists.add("v");
 
        
        //用来存储将要取值的list集合的对应元素索引
        Set<Integer> result=new HashSet<Integer>();
        //建立一个新的Lsit集合用来添加取出的元素,
        //当然也可以直接用set集合取值,只是为了展示根据个人需求来定把
        List<String>  list= new ArrayList<String>();
        while(result.size()<9){
            Random random = new Random();
            int i = random.nextInt(lists.size());
            //System.out.println(i);
            result.add(i);
        }
        for (Integer j: result) {
            list.add(lists.get(j));
        }
        for (String s:list) {
            System.out.print(s.toString()+list.indexOf(s)+"==");
        }

    }



}

最终随机输出值:q0==r1==d2==h3==i4==j5==l6==o7==p8==

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值