使用整数迭代非常大的csv文件的有效方法?

时间:2017-12-05 20:35:35

标签: java csv

输入1:带有长整数列表的.csv文件。例如:

1
10
23
2450
12
560
320
705
...

输入2:带有整数列表的.csv文件,以及每个整数旁边的空白位置

5 -
12 - 
15 -
13 -
350 -

输出:从输入1中查找输入2整数大于或等于的整数计数,并将该数字附加到.csv文件中。

问题在于这涉及DNA测序,输入1有超过一百万个数据条目。什么是解决这个问题的有效方法?

我的想法是将输入1的所有条目读入一个大型数组并对其进行排序,但这似乎既低效又需要大量内存。任何指导都将不胜感激。

修改

输出(与输入2相同的文件):

int,count

5 1
12 3
15 3
13 3
350 5 

1 个答案:

答案 0 :(得分:0)

将第二个文件中的数字放入有序地图中,值为零:

TreeMap<Integer, Integer> counts = new TreeMap<>();
for (Integer i : fromFile2) {
  counts.put(i, 0);
}

然后,对于从第一个文件中读取的每个数字,将计数增加到该数字:

for (Integer i : fromFile1) {
  counts.headMap(i).replaceAll((k, v) -> v + 1);
}

请注意,第二个循环并不需要您将整个文件读入内存:您可以一次只读取一个。

另请注意,headMap(i)会返回密钥严格小于i的条目。假设i < Integer.MAX_VALUE,您只需将1添加到该值即可。