Bắt đầu ngayBắt đầu miễn phí

Tối ưu xử lý ảnh với parallel streams

Bạn đang xây dựng một ứng dụng xử lý ảnh áp dụng các bộ lọc cho những lô ảnh lớn. Hiện tại, ứng dụng xử lý ảnh tuần tự, nhưng điều này đang trở thành nút thắt hiệu năng khi số lượng ảnh tăng lên. Nhiệm vụ của bạn là triển khai giải pháp dùng parallel stream để cải thiện hiệu năng.

Lớp Image đã được nạp sẵn cho bạn.

Bài tập này là một phần của khóa học

Tối ưu hóa mã trong Java

Xem khóa học

Hướng dẫn bài tập

  • Chuyển stream thành stream song song để xử lý nhanh hơn.
  • Áp dụng bộ lọc cho tất cả ảnh trong stream.
  • Gom các ảnh vào một danh sách duy nhất.

Bài tập tương tác thực hành trực tiếp

Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.

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;
    }
}
Chỉnh sửa và Chạy Mã