Java.use(better);

前の記事次の記事
Java.use(better);


Episode#09

クロージャーの代用表現 -- 配列と別れる50の方法


《関連記事》

□ select 操作を実現する

メソッド select を実現するときには、抽象メソッド iterate を利用します。

  public List select(final Select method) {
    return iterate(new Iterate() {
      public List call(List acc, int value) {
        if (method.call(value)) acc.add(value);
        return acc;
      }},
      new Vector());
  }

iterate の第1引数には、インターフェース Iterate に準拠するインスタンスを指定します。また、第2引数には、新たに生成するコレクションの初期値(要素を含まない空のコレクション)を指定します。

まず、メソッド call の本体では、第2引数 value を介して、コレクションの各要素を参照できます。そこで、メソッド select の引数に指定したメソッド method を呼び出すときに、各要素 value を指定すると、その条件式 method.call(value) を判定した結果が得られます。

次に、メソッド call の本体では、第1引数 acc を介して、新たに生成するコレクションを参照できます。そこで、条件を満たす要素だけを、コレクションの要素として順に追加 add します。

□ select 操作を利用する

九九の表を作成する例題を使って、select 操作の理解を深めます。

  static void tips_table_select() {
    List seq = range(1,9);
    for (final int n: seq) {
      List s = new Sequence(range(n,n*9)).select(
      new Select() {
        public boolean call(int e) { return e%n == 0; }
      });
      for (int e: s)
        System.out.print(String.format("%2d ", e));
      System.out.println();
    }
  }
  ...
(前述と同じ結果)

n から n*9 までの数列 s を用意します。このとき、n の値は、1 から 9 まで順に変化します。select 操作を利用して、s の各要素から、n の倍数だけを選択すると、九九の表が完成します。

インターフェース Select に準拠する、無名クラスのインスタンスを用意するときに、メソッド call の本体で各要素 e が n の倍数かどうかを判定するだけです。

 ↑ TOP

》作業中です《

update*13/02/02 19:41:31