如何处理大型csv文件或读取大块csv文件



我有非常大的csv文件,我试图通过迭代。我正在使用opencsv,我想使用CsvToBean,这样我就可以从数据库动态设置列映射。我的问题是如何做到这一点,而不抓住整个文件并将其扔到列表中。我试图防止记忆错误。

我目前将整个结果集传递到一个列表中,如下所示。

List<MyOption> myObjects = csv.parse(strat, getReader("file.txt"));
for (MyObject myObject : myObjects) {
    System.out.println(myObject);
}

但是我发现了这个迭代器方法,我想知道这是否会一次迭代每一行而不是整个文件?

Iterator myObjects = csv.parse(strat, getReader("file.txt")).iterator();
while (myObjects.hasNext()) {
    MyObject myObject = (MyObject) myObjects.next();
    System.out.println(myObject);
}

我的问题是Iterator和list的区别是什么?

增强的for循环(for (MyObject myObject : myObjects))是使用Iterator实现的(它要求csv.parse(strat, getReader("file.txt"))返回的实例实现Iterable接口,其中包含一个返回Iteratoriterator()方法),因此两个代码片段之间没有性能差异。

p。S

在第二个代码片段中,不要使用原始的Iterator类型,使用Iterator<MyObject>:
Iterator<MyObject> myObjects = csv.parse(strat, getReader("file.txt")).iterator();
while (myObjects.hasNext()) {
    MyObject myObject = myObjects.next();
    System.out.println(myObject);
}

" Iterator和list的区别是什么?"

List是一种数据结构,它为用户提供了get()、toArray()等功能。

只有在数据结构实现了iterator接口(所有数据结构都实现了iterator接口)的情况下,迭代器才能允许用户在数据结构中导航

所以List<MyOption> myObjects = csv.parse(strat, getReader("file.txt"));物理地将数据存储在myObjects

Iterator myObjects = csv.parse(strat, getReader("file.txt")).iterator();只使用csv.parse

的迭代器功能

相关内容

  • 没有找到相关文章

最新更新