Runnableインターフェイスを使用して必要な関数をラップアラウンドするだけで、関数の時刻を設定しようとしています。Java Lambda Expression(非最終関数パラメータあり)
double durationOfFunctionB = time(() -> functionB(someParameter));
問題I:私は、パラメータをとる関数を持っている場合は、それがに修正されなければならない、しかし
double durationOfFunctionA = time(Driver::functionA); // functionA belongs in class Driver
:
private static double time(Runnable runnable) { // returns how long runnable took
long startTime = System.nanoTime();
runnable.run();
return (System.nanoTime() - startTime)/1000000000.0;
}
その後、私は単純に次のことを行うことができます「someParameter」は最終的に、または効果的に最終的でなければならないということです。この問題を回避する方法はありますか?私はforEachでループを見ましたが、条件が満たされるまでこのパラメータを1,10,100から指数関数にする必要があります。このコードは次のとおりです:
public static void main(String[] args) {
double timer = 0;
int size = 1;
while(timer <= 10) {
timer = time(() -> functionB(size));
size *= 10;
}
}
私は複雑さ/ big-Oをテストしたいので、functionBはパラメータを取り込む必要があります。私はラムダ式を正しい方法でコーディング/使用していないと心配しています。誰かがこの問題を解決するのに役立ち、別の解決策を見つけることができれば、それは感謝します。
私はこれをRunnableインターフェイスと非常に複雑にする必要はないことを知っています。私はちょうどwhileループでタイミングを正しく行うことができます。しかし、このようなことができるかどうかを見てみたかったので、テストするための関数と構文的な砂糖を入力するだけでした。
お試しください...説明を追加しますか? – GhostCat
助けてくれてありがとう!私はこれは配列が最終的なものだと仮定していますが、実際の内容は柔軟性がありますか? –