![JAR search and dependency download from the Maven repository](/logo.png)
com.pivovarit.collectors.BatchingStream Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of parallel-collectors Show documentation
Show all versions of parallel-collectors Show documentation
Parallel collection processing with customizable thread pools
package com.pivovarit.collectors;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Stream;
import static java.lang.Runtime.getRuntime;
import static java.util.Spliterator.ORDERED;
import static java.util.Spliterators.spliteratorUnknownSize;
import static java.util.stream.StreamSupport.stream;
final class BatchingStream implements Iterator> {
private final List source;
private final int size;
private int chunks;
private int chunkSize;
private int leftElements;
private int i;
private BatchingStream(List list, int numberOfParts) {
source = list;
size = list.size();
chunks = numberOfParts;
chunkSize = (int) Math.ceil(((double) size) / numberOfParts);
leftElements = size;
}
private static Iterator> from(List source, int chunks) {
return new BatchingStream<>(source, chunks);
}
static int defaultBatchAmount() {
return Math.max(getRuntime().availableProcessors() - 1, 1);
}
static Stream> partitioned(List list, int numberOfParts) {
return stream(spliteratorUnknownSize(from(list, numberOfParts), ORDERED), false);
}
@Override
public boolean hasNext() {
return i < size && chunks != 0;
}
@Override
public List next() {
List batch = source.subList(i, i + chunkSize);
i = i + chunkSize;
leftElements = leftElements - chunkSize;
chunkSize = (int) Math.ceil(((double) leftElements) / --chunks);
return batch;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy