【发布时间】:2018-01-20 04:02:06
【问题描述】:
我有
Iterable<CSVRecord> = CSVFormat.RFC4180.withFirstRecordAsHeader().parse(in)(阿帕奇公地)
> 10.000.000.000 行的记录。以前我有带有计数器的 for 循环,并且在每 x 行之后我正在处理数据。现在我尝试使用 Java 8 lambda 表达式来实现类似的效果。
到目前为止,我想出了这个,但是内存不足,因为我无法找到正确的方法来将其拆分为 subList
Iterable<List<?>> params = new ArrayList<>(StreamSupport
.stream(records.spliterator(), true)
.map(r -> Arrays.asList(
r.get("name"),
r.get("surname"),
r.get("something"),
))
.collect(Collectors.toList()).subList(0, 20000));
最后的子列表不起作用:(
我只需要一些概念证明如何拆分Iterable - 例如把subList放在哪里合适?
【问题讨论】:
-
records是一个列表吗?如果是这样,也许您可以使用来自 guava 的 Lists.partition(Iterables 中也有一个版本)。 -
更新了我的问题。调试器说记录是
org.apache.commons.csv.CSVParser
标签: java lambda apache-commons iterable sublist