从集合中的随机值中获取优雅的数据集

时间:2015-11-09 14:57:32

标签: java random

当每个值在随机位置至少出现一次时,我需要从值(准备好的集合)中获取数据集。

运行以下代码后,此条件有时仅满足。 怎样才能改善这一代?

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()));
    }

2 个答案:

答案 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);