Java从CSV中的100行中随机选择10行
我正在开发一个Java程序,我有一个包含100行的data.csv文件。我想随机选择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
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()
并迭代经过洗牌的结果会更快更容易。该用户拥有更小的数据集,他必须遵循更大的数据集