Beeldverwerking optimaliseren met parallelle streams
Je werkt aan een beeldverwerkingsapplicatie die filters toepast op grote batches afbeeldingen. Op dit moment verwerkt de applicatie afbeeldingen sequentieel, maar dat wordt een knelpunt nu het aantal afbeeldingen toeneemt. Jij krijgt de taak om een oplossing met een parallelle stream te implementeren om de prestaties te verbeteren.
De klasse Image is alvast voor je geladen.
Deze oefening maakt deel uit van de cursus
Code optimaliseren in Java
Oefeninstructies
- Zet de stream om naar een parallelle stream voor snellere verwerking.
- Pas filters toe op alle afbeeldingen in de stream.
- Verzamel de afbeeldingen in één lijst.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
public class ImageProcessor {
public static void main(String[] args) {
List images = generateImages(500);
List result = images
// Use a parallel stream for multi-thread processing
.____()
// Apply filters to each image using `map()`
.____(image -> applyFilters(image))
// Collect images to a single list
.____(Collectors.toList());
}
static Image applyFilters(Image image) {
image = blur(image);
image = sharpen(image);
return image;
}
static Image blur(Image image) {
process(); return new Image(image.id, image.width, image.height);
}
static Image sharpen(Image image) {
process(); return new Image(image.id, image.width, image.height);
}
static void process() {
for (int i = 0; i < 100000; i++) {
double result = Math.sin(i) * Math.cos(i);
}
}
static List generateImages(int count) {
List list = new ArrayList<>();
for (int i = 0; i < count; i++) {
list.add(new Image(i, 1920, 1080));
}
return list;
}
}