Я стремлюсь сделать это без использования каких-либо вспомогательных структур, чтобы уменьшить использование кучи, поскольку вводимые данные могут быть очень большими.
Я бы также предпочитаю избегать метода peek() из-за его потенциальных побочных эффектов в определенных сценариях, как подробно описано в этой статье 4Comprehension.
Код: Выделить всё
public static long extractAndProcess(Stream streamData, int pageIndex, int itemsPerPage, Consumer itemHandler) {
long startPosition = (long) pageIndex * itemsPerPage;
AtomicLong totalCount = new AtomicLong();
streamData.peek(item -> totalCount.incrementAndGet())
.skip(startPosition)
.limit(itemsPerPage)
.forEachOrdered(itemHandler);
return totalCount.get();
}
Подробнее здесь: https://stackoverflow.com/questions/768 ... structures