Optimizarea procesării imaginilor cu stream-uri paralele
Lucrezi la o aplicație de procesare a imaginilor care aplică filtre pe loturi mari de imagini. Momentan, aplicația procesează imaginile secvențial, ceea ce devine un bottleneck pe măsură ce numărul de imagini crește. Sarcina ta este să implementezi o soluție bazată pe stream-uri paralele pentru a îmbunătăți performanța.
Clasa Image a fost preîncărcată pentru tine.
Acest exercițiu face parte din cursul
Optimizarea codului în Java
Instrucțiuni pentru exercițiu
- Convertește stream-ul într-un stream paralel pentru o procesare mai rapidă.
- Aplică filtrele tuturor imaginilor din stream.
- Colectează imaginile într-o singură listă.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
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;
}
}