在开发过程中有遇到需求,当用户点击刷新的时候,需要从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==