Java.use(better);
□ select 操作を実現する
メソッド select を実現するときには、抽象メソッド iterate を利用します。
public Listselect(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() { Listseq = 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