並列ストリームで画像処理を最適化する
大量の画像にフィルターを適用する画像処理アプリケーションに取り組んでいます。現在は画像を逐次処理していますが、画像数の増加に伴ってボトルネックになっています。パフォーマンスを改善するため、並列ストリームによる実装を行ってください。
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;
}
}