Bildverarbeitung mit Parallel Streams optimieren
Du arbeitest an einer Bildverarbeitungsanwendung, die Filter auf große Bildmengen anwendet. Aktuell verarbeitet die Anwendung die Bilder sequenziell, was bei steigender Bildanzahl zum Flaschenhals wird. Deine Aufgabe ist es, eine Lösung mit einem Parallel Stream zu implementieren, um die Leistung zu verbessern.
Die Klasse Image wurde für dich vorab geladen.
Diese Übung ist Teil des Kurses
Codeoptimierung in Java
Anleitung zur Übung
- Wandle den Stream in einen parallelen Stream für schnellere Verarbeitung um.
- Wende Filter auf alle Bilder im Stream an.
- Sammle die Bilder in einer einzelnen Liste.
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
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;
}
}