我有非常大的 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);
}
所以我的问题是迭代器和列表有什么区别?
增强的 for 循环 (for (MyObject myObject : myObjects)
)是使用Iterator
(它要求返回的实例csv.parse(strat, getReader("file.txt"))
实施Iterable
接口,其中包含一个iterator()
返回一个方法Iterator
),因此两个代码片段之间没有性能差异。
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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)