Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java从CSV中的100行中随机选择10行_Java_Random - Fatal编程技术网

Java从CSV中的100行中随机选择10行

Java从CSV中的100行中随机选择10行,java,random,Java,Random,我正在开发一个Java程序,我有一个包含100行的data.csv文件。我想随机选择10行。数据如下所示: T1 T2 T3 T4 T5 1 1.0 1 0 1 1 1.0 0 0 1 0 0.0 1 1 0 我已使用以下代码成功读取CSV文件: public static void main(String[] args) throws IOException { try { Sc

我正在开发一个Java程序,我有一个包含100行的data.csv文件。我想随机选择10行。数据如下所示:

    T1  T2  T3  T4  T5
    1   1.0  1   0   1
    1   1.0  0   0   1
    0   0.0  1   1   0
我已使用以下代码成功读取CSV文件:

public static void main(String[] args) throws IOException {
    try
    {
        Scanner readIn = new Scanner (new File ("data.csv") );
        while ( readIn.hasNext() )
        {               
            line = readIn.nextLine();
            str = line.split(",",-1);        
        }
        readIn.close();     
    }
    catch (ArrayIndexOutOfBoundsException ob)
    {
        System.out.println("File not found..." );
    } 
    catch (FileNotFoundException e) 
    {
        e.printStackTrace();
    }
}   

使用重复编号检查更新代码:

    int j=0;
    Map<Integer,Integer> numberMap=new HashMap<Integer,Integer>();
    SecureRandom random = new SecureRandom(); 
    while(j!=10)
    {
        int row = random.nextInt(list.size()); 
        if(!numberMap.containsKey(Integer.valueOf(row)))
        {
            numberMap.put(Integer.valueOf(row), Integer.valueOf(row));
            System.out.println("Row "+row+"="+list.get(row));
            j++;
        }
    }
intj=0;
Map numberMap=newhashmap();
SecureRandom=新的SecureRandom();
而(j!=10)
{
int row=random.nextInt(list.size());
如果(!numberMap.containsKey(Integer.valueOf(row)))
{
numberMap.put(Integer.valueOf(row),Integer.valueOf(row));
System.out.println(“行”+行+“=”+列表.get(行));
j++;
}
}

您是否考虑过将所有行添加到ArrayList,然后随机删除10行?可能不是最有效的方法,但可能是最容易编码的方法。您使用什么集合来收集数据?或者您使用的是普通数组?您的问题是什么?问题是,为什么这个标记为“opencsv”如果您没有使用该库?@tnw他的问题是为他提供一些算法,从可能的100行中随机选择10行。这显然不是完美的解决方案,因为随机值有可能多次生成同一行。是的,在这种情况下,我们需要存储以前的数字,比如map,并检查是否存在条件。不要在循环的每次迭代中创建新的
SecureRandom()!!!如果样本量是数据的一小部分,则此方法有效。对于更大的比例,使用
Collections.shuffle()
并迭代经过洗牌的结果会更快更容易。该用户拥有更小的数据集,他必须遵循更大的数据集