시작하기무료로 시작하기

병렬 스트림으로 이미지 처리 최적화

여러 장의 이미지에 필터를 적용하는 이미지 처리 애플리케이션을 개발하고 있어요. 현재는 이미지를 순차적으로 처리하고 있는데, 이미지 수가 늘어나면서 병목이 발생하고 있습니다. 성능을 높이기 위해 병렬 스트림을 사용하는 해결책을 구현해 주세요.

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;
    }
}
코드 편집 및 실행