Ottimizzare l'elaborazione delle immagini con gli stream paralleli
Stai lavorando a un'applicazione di elaborazione delle immagini che applica filtri a grandi lotti di immagini. Al momento, l'applicazione elabora le immagini in modo sequenziale, ma questo sta diventando un collo di bottiglia man mano che il numero di immagini aumenta. Il tuo compito è implementare una soluzione con stream paralleli per migliorare le prestazioni.
La classe Image è già stata precaricata per te.
Questo esercizio fa parte del corso
Ottimizzazione del codice in Java
Istruzioni dell'esercizio
- Converti lo stream in uno stream parallelo per un'elaborazione più veloce.
- Applica i filtri a tutte le immagini nello stream.
- Raccogli le immagini in un'unica lista.
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
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;
}
}