Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.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
将数据从CSV快速加载到列表[Java]_Java_Csv_Arraylist - Fatal编程技术网

将数据从CSV快速加载到列表[Java]

将数据从CSV快速加载到列表[Java],java,csv,arraylist,Java,Csv,Arraylist,我在CSV文件的几列中有大约500.000条记录 ID | property1 | property2 | property3 | property4 我需要将此数据加载到对象的ArrayList中。ID不是唯一的。每个新ID都需要类ID的新实例,其余的都是不同类Foo的实例。 当我读取CSV并找到ID时,我需要类的实例ID。最快的方法是什么?我尝试使用HashSet或HashMap(然后在列表中搜索大约需要5分钟)和lambda表达式(大约6分钟)。我不能使用数据库 我建议您将文件读入映射大部

我在CSV文件的几列中有大约500.000条记录

ID | property1 | property2 | property3 | property4

我需要将此数据加载到对象的ArrayList中。ID不是唯一的。每个新ID都需要类
ID
的新实例,其余的都是不同类
Foo
的实例。
当我读取CSV并找到ID时,我需要类的实例
ID
。最快的方法是什么?我尝试使用HashSet或HashMap(然后在列表中搜索大约需要5分钟)和lambda表达式(大约6分钟)。我不能使用数据库

我建议您将文件读入
映射
大部分时间将用于创建记录字符串

根据每行的长度,读取时间不应超过几秒钟,查找时间将为亚微秒

您可以只记录每行的起始位置,并在实际需要时解析它们

下面是一个使用流的示例

PrintWriter pw = new PrintWriter("file.txt");
for (int i = 0; i < 500000; i++)
    pw.println("ID" + i / 2 + " | property1 | property2 | property3 | property4");
pw.close();

long start = System.currentTimeMillis();
Pattern BAR = Pattern.compile(" *[|] *");
Map<String, List<String[]>> collect = Files.lines(Paths.get("file.txt"))
        .map(line -> BAR.split(line))
        .collect(Collectors.groupingBy(l -> l[0]));
long time = System.currentTimeMillis() - start;
System.out.println("Took "+time/1e3+" seconds");
这是在一本超级书上运行的

同时运行会稍微加快速度

long start = System.currentTimeMillis();
Pattern BAR = Pattern.compile(" *[|] *");
Map<String, List<String[]>> collect = Files.lines(Paths.get("file.txt"))
        .parallel()
        .map(line -> BAR.split(line))
        .collect(Collectors.groupingByConcurrent(l -> l[0]));
long time = System.currentTimeMillis() - start;
System.out.println("Took "+time/1e3+" seconds");

欢迎来到堆栈溢出!你的问题相当广泛,如果你提供一个最简单的例子,并问一些关于它的具体问题,比如瓶颈可能在哪里,或者如何完成你想做的特定事情,可能会更清楚。请尽量使你的问题更具体。祝你好运谢谢,我试着这么做。我认为大部分时间都花在创建新ID_对象的新实例上(我认为大约有60.000个对象要创建,其余的都是这个ID的属性)。ID是一个类,属性可以是字符串,所以当我在循环中创建对象时,最多需要6分钟@凯撒:尝试使用并行流。如果你有比我更多的内核,这会有帮助。非常感谢Peter,我会尝试,如果我能做到这一点,我会让你知道
long start = System.currentTimeMillis();
Pattern BAR = Pattern.compile(" *[|] *");
Map<String, List<String[]>> collect = Files.lines(Paths.get("file.txt"))
        .parallel()
        .map(line -> BAR.split(line))
        .collect(Collectors.groupingByConcurrent(l -> l[0]));
long time = System.currentTimeMillis() - start;
System.out.println("Took "+time/1e3+" seconds");
Took 2.589 seconds