import java.util.ArrayList;
import java.util.List;
public class BatchProcessor {
/**
* Processes a list of datasets in batches.
*
* @param datasets A list of datasets to process.
* @param batchSize The size of each batch.
* @param operation The operation to perform on each dataset.
* @param flag1 An optional flag.
* @param flag2 Another optional flag.
*/
public void processBatched(List<?> datasets, int batchSize, Processor operation, Boolean flag1, Boolean flag2) {
if (datasets == null || datasets.isEmpty()) {
return;
}
int numDatasets = datasets.size();
int start = 0;
while (start < numDatasets) {
int end = Math.min(start + batchSize, numDatasets); // Calculate end index for the current batch
List<?> batch = datasets.subList(start, end); // Extract the batch
processBatch(batch, operation, flag1, flag2); // Process the batch
start = end; // Update the start index for the next batch
}
}
private void processBatch(List<?> batch, Processor operation, Boolean flag1, Boolean flag2) {
for (Object dataset : batch) {
operation.process(dataset, flag1, flag2); // Process each dataset in the batch
}
}
/**
* Functional interface for the processing operation.
*/
@FunctionalInterface
public interface Processor {
void process(Object dataset, Boolean flag1, Boolean flag2);
}
public static void main(String[] args) {
// Example Usage
List<String> data = new ArrayList<>();
data.add("Data 1");
data.add("Data 2");
data.add("Data 3");
data.add("Data 4");
data.add("Data 5");
data.add("Data 6");
data.add("Data 7");
data.add("Data 8");
BatchProcessor processor = new BatchProcessor();
// Example operation: Print the data with flags
Processor printProcessor = (dataset, flag1, flag2) -> {
System.out.println("Processing: " + dataset + ", Flag1: " + flag1 + ", Flag2: " + flag2);
};
// Process in batches of size 3, with flag1 set to true
processor.processBatched(data, 3, printProcessor, true, false);
}
}
Add your comment