我有 Iterable<CSVRecord> = CSVFormat.RFC4180.withFirstRecordAsHeader().parse(in)
(apache共享) 记录这是> 10.000.000.000行。以前我曾经用循环计数器,并在每个x行之后处理数据。现在我试图用Java 8 lambda表达式实现类似的效果。如何分割与lambda表达式块Iterable
到目前为止,我想出了这一点,但它运行的内存,因为我无法找到正确的方式如何分割,在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
是“记录”列表吗?如果是这样,也许你可以使用guava中的Lists.partition(在Iterables中也有一个版本)。 – 2017-08-11 15:20:04
更新了我的问题。调试器说,记录是'org.apache.commons.csv.CSVParser' – lapkritinis