Java 8では、メソッドをLambda式として作成し、参照で渡すことができます(内部では少し作業が必要です)。オンラインでラムダを作成してメソッドで使用する例はたくさんありますが、ラムダをパラメーターとして取るメソッドの作成方法の例はありません。そのための構文は何ですか? MyClass.method((a, b) -> a+b); class MyClass{ //How do I define this method? static int method(Lambda l){ return l(5, 10); } }
私はJava 8でラムダで遊んでいて、警告に出くわしましたlocal variables referenced from a lambda expression must be final or effectively final。匿名クラス内で変数を使用する場合、それらは外部クラスでfinalでなければならないことは知っていますが、それでも-finalと実質的にfinalの違いは何ですか?
Microsoft Lambda Expressionのドキュメントをすぐに読みました。 ただし、この種の例は、理解を深めるのに役立ちました。 delegate int del(int i); del myDelegate = x => x * x; int j = myDelegate(5); //j = 25 それでも、なぜそれがそのようなイノベーションなのか、私にはわかりません。「メソッド変数」が終了したときに死ぬのは単なるメソッドですよね?実際の方法の代わりにこれを使用する必要があるのはなぜですか?
そのような左外部結合があると仮定します: from f in Foo join b in Bar on f.Foo_Id equals b.Foo_Id into g from result in g.DefaultIfEmpty() select new { Foo = f, Bar = result } 拡張メソッドを使用して同じタスクをどのように表現しますか?例えば Foo.GroupJoin(Bar, f => f.Foo_Id, b => b.Foo_Id, (f,b) => ???) .Select(???)