请为我优化下面的代码用Collections.shuffle实现随机商品推荐,用getRand(int Num)代替避免随机出现的商品重复:public List<Object> getRandTen() { List<Object> randList = new ArrayList<>(); for (int i = 0; i < 10; i++) { int rand = (int) (Math.random() * 4); // 随机生成0~3的整数 switch (rand) { case 0: randList.addAll(a.getRand()); break; case 1: randList.addAll(b.getRand()); break; case 2: randList.addAll(c.getRand()); break; case 3: randList.addAll(d.getRand()); break; default: break; } } return randList; }
时间: 2023-06-25 17:03:07 浏览: 148
可以使用Collections.shuffle()方法来实现随机商品推荐。同时,可以使用一个Set来保存已经选过的商品,避免重复选择。
以下是优化后的代码:
```
public List<Object> getRandTen() {
List<Object> randList = new ArrayList<>();
Set<Object> selectedSet = new HashSet<>();
int num = 10; // 需要选取的商品数量
while (num > 0) {
int rand = (int) (Math.random() * 4); // 随机生成0~3的整数
switch (rand) {
case 0:
randList.addAll(getRand(a, selectedSet, num));
break;
case 1:
randList.addAll(getRand(b, selectedSet, num));
break;
case 2:
randList.addAll(getRand(c, selectedSet, num));
break;
case 3:
randList.addAll(getRand(d, selectedSet, num));
break;
default:
break;
}
num = 10 - randList.size();
}
Collections.shuffle(randList);
return randList;
}
private List<Object> getRand(Object obj, Set<Object> selectedSet, int num) {
List<Object> randList = new ArrayList<>();
while (num > 0) {
Object randObj = ((RandInterface) obj).getRand();
if (!selectedSet.contains(randObj)) {
randList.add(randObj);
selectedSet.add(randObj);
num--;
}
}
return randList;
}
public interface RandInterface {
Object getRand();
}
class A implements RandInterface {
public Object getRand() {
// 返回随机商品
}
}
class B implements RandInterface {
public Object getRand() {
// 返回随机商品
}
}
class C implements RandInterface {
public Object getRand() {
// 返回随机商品
}
}
class D implements RandInterface {
public Object getRand() {
// 返回随机商品
}
}
```
在上面的代码中,我们定义了一个RandInterface接口,用于表示可以随机获取一个商品的类。A、B、C、D类实现了该接口,并且提供了getRand()方法来获取随机商品。
在getRandTen()方法中,我们使用一个Set来保存已经选过的商品,然后在每次随机选取商品时,先判断该商品是否已经被选过,如果已经被选过,则跳过,继续选取下一个商品。直到选出了10个不重复的商品之后,再使用Collections.shuffle()方法来打乱商品的顺序。
阅读全文