我有
Iterable<CSVRecord> = CSVFormat.RFC4180.withFirstRecordAsHeader().parse(in)
( Apache 共享)
记录> 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
?
最佳答案
我不确定您是否可以使用单个 lambda 表达式来完成此操作,但您可以使用 .skip()
和 .limit()
:
int maxSize = 20000;
int currentOffset = 0; // Increment by maxSize each iteration
Iterable<List<?>> params = new ArrayList<>(StreamSupport
.stream(records.spliterator(), true)
.skip(currentOffset)
.limit(maxSize)
.map(r -> Arrays.asList(
r.get("name"),
r.get("surname"),
r.get("something"),
))
.collect(Collectors.toList())
关于java - 如何使用 lambda 表达式将 Iterable 拆分为 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45638533/