public class ArraysDemo {
public static void main(String[] args) {
int[] a = {0, 2, 4, 6, 8};
int[] b = {10, 12, 14, 16, 18};
Arrays.setAll(a, i -> b[i]+1);
System.out.println(Arrays.toString(a));
}
}
出力:[11, 13, 15, 17, 19]
使用した関数のソースは次のsetAll()
とおりです。
public static void setAll(int[] array, IntUnaryOperator generator) {
Objects.requireNonNull(generator);
for (int i = 0; i < array.length; i++)
array[i] = generator.applyAsInt(i);
}
IntUnaryOperator
は機能的なインターフェースであり、これはそのソースの一部です:
public interface IntUnaryOperator {
int applyAsInt(int operand);
// rest methods are omitted
}
間違っている場合は訂正してください。ただし、Java でのラムダ式についての私の理解では、ラムダ式をパラメータとしてメソッドに渡すと、インターフェイスsetAll()
を実装する匿名クラスのオブジェクトが作成され、呼び出されます。そして、ラムダ式は本質的にメソッドの実装であるため、次のように変換されると思います。IntUnaryOperator
generator
applyAsInt()
int applyAsInt(int operand){
return b[operand]+1;
}
operand
引数として渡されたときにアクセスできることは理にかなっていますがarray[i] = generator.applyAsInt(i);
、どのように操作できるかわかりませんb
-パラメーターとして渡されないので、どのように参照できるのでしょうか? 私は何が欠けていますか?