当每个值在随机位置至少出现一次时,我需要从值(准备好的集合)中获取数据集。
运行以下代码后,此条件有时仅满足。 怎样才能改善这一代?
private static Random rand = new Random();
private static int N = 5;
public static void main(String[] args){
List<String> indexList = new ArrayList<>();
indexList.add("aaa");
indexList.add("bbb");
indexList.add("ccc");
indexList.add("ddd");
List<String> generatedDataList = new ArrayList<String>();
for (int i=0; i<=5; i++) {
String generatedIndex = getRandomValue(indexList);
System.out.println("Step " + i+ ": " + generatedIndex);
generatedDataList.add(generatedIndex);
}
}
static String getRandomValue(List<String> list){
return list.get(rand.nextInt(list.size()));
}
答案 0 :(得分:1)
您可以使用Collections.shuffle方法随机播放indexList
,简单:
Collections.shuffle(indexList)
答案 1 :(得分:1)
如果您希望每个字符串至少出现一次,最好的方法是在开头添加所有字符串,然后只添加两个随机String
,最后将列表随机播放。
List<String> generatedDataList = new ArrayList<String>(indexList);
for (int i = 0; i < 2; i++)
generatedDataList.add(getRandomValue(indexList));
Collections.shuffle(generatedDataList);