CUBは子供の白熊

Java SE 8 実践プログラミングの練習問題を解く

2015-06-01から1ヶ月間の記事一覧

第3章 ラムダ式を使ったプログラミング : 問題 17 : ラムダ式と例外 その2

問題 first と second を並列に実行し、どちらかのメソッドが例外をスローしたら handler を呼び出すメソッド void doInParallelAsync(Runnable first, Runnable second, Consumer<Throwable> handler) を実装せよ 解答 まずRunnableで起こった例外を処理する新たなRunn</throwable>…

第3章 ラムダ式を使ったプログラミング : 問題 16 : ラムダ式と例外

問題 first が生成した結果を second が消費し、その間に発生したエラーを handler が処理するメソッド public static <T> void doInOrderAsync(Supplier<T> first, Consumer<T> second, Consumer<Throwable> handler) { new Thread( () -> { try { T result = first.get(); seco</throwable></t></t></t>…

第3章 ラムダ式を使ったプログラミング : 問題 15 : 画像変換の並列化

問題 LatentImageクラスに操作の並列化機能を追加せよ 解答 LatentImageクラスの Nested Class であるTransformedPixelReaderはスレッドセーフではないので、スレッドセーフな派生クラスを定義する まずTransformedPixelReaderのフィールドを全てprivateから…

第3章 ラムダ式を使ったプログラミング : 問題 14 : PixelReader による画像変換の拡張

問題 ピクセル単位の遅延評価を扱うため、今までの画像変換を変更して、画像内の任意のピクセルを読み込むことができるPixelReaderを渡すようにせよ 色だけを参照する単純な変換であるグレイスケール変換は (x, y, reader) -> reader.getColor(x, y).graysca…

第3章 ラムダ式を使ったプログラミング : 問題 13 : 畳み込みフィルターの遅延処理

問題 ぼやけ検出あるいはエッジ検出といった畳み込みフィルターは、隣接するピクセルから一つのピクセルを計算する 畳み込みフィルターを扱えるように LatentImage クラスを機能強化せよ 解答 まずColorTransformerを拡張した畳み込みフィルターの関数型イン…

第3章 ラムダ式を使ったプログラミング : 問題 12 : 遅延画像クラス LatentImage の拡張

問題 本文に出てきた色変換を遅延実行する画像 LatentImage クラスをUnaryOperator<Color>とColorTransformerの両方をサポートするように拡張せよ ■ LatentImage クラスの概要 public class LatentImage { /** 変換対象の画像 */ private final Image in; /** 適用</color>…

第3章 ラムダ式を使ったプログラミング : 問題 11 : 色変換の合成

問題 二つのColorTransformerを合成するメソッドを実装せよ さらにUnaryOperator<Color>から、X座標とY座標を無視するColorTransformerを生成するメソッドを実装せよ 解答 この本には “static メソッド” と指定してあったが、私が最もふさわしいと思う場所、即ちCol</color>…

第3章 ラムダ式を使ったプログラミング : 問題 10 : 関数合成

問題 第3章 ラムダ式を使ったプログラミング : 画像変換 - CUBは子供の白熊 において、transformメソッドに渡すUnaryOperator<Color>は以下のように指定した Image finalImage = transform(image, Color::brighter); そこで、画像変換を “グレースケールにしてから</color>…

第3章 ラムダ式を使ったプログラミング : 問題 9 : リフレクションによる Comparator の生成

問題 指定された順序で指定されたフィールドを比較するComparatorを生成するメソッド Comparator lexicographicComparator(String... fieldNames) を書け。 例えば lexicographicComparator("lastname", "firstname") は 2つのObjectを引数に受け取り リフレ…

第3章 ラムダ式を使ったプログラミング : 問題 8 : 画像変換の生成

問題 画像に任意の幅と任意の色の枠を追加するColorTransformerを生成するメソッドを実装せよ 解答 ColorTransformerは、第3章 ラムダ式を使ったプログラミング : 問題 5 : 座標を考慮した画像変換 - CUBは子供の白熊 で以下のように定義した @FunctionalInt…