開始使用免費開始

使用 parallel streams 最佳化影像處理

你正在開發一個影像處理應用程式,用來對大量影像套用各種濾鏡。現在程式是逐一(序列)處理影像,但隨著影像數量增加,這已經成為瓶頸。你的任務是實作平行串流的解決方案來提升效能。

Image 類別已為你預先載入。

本練習屬於課程

Java 程式碼最佳化

檢視課程

練習說明

  • 將串流轉換為「平行」串流,以加快處理速度。
  • 對串流中的所有影像套用濾鏡。
  • 將影像彙整成單一清單。

動手互動練習

試著完成這個範例程式碼,體驗一下這個練習。

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;
    }
}
編輯並執行程式碼